2011-05-25 90 views
2

我有這第一個查詢。我將如何在單個查詢中加入這兩個查詢?

SELECT item.id, item.name, item.description, 
     item.tnURL, item.spec_id, item.item_type, item.sub_category 
FROM item, fb_item_promo 
WHERE fb_item_promo.item_id=item.id; 

而第二個查詢。

SELECT item.id, item.name, item.description, 
     item.tnURL, item.spec_id, item.item_type, item.sub_category 
FROM item 
WHERE item.description LIKE '%package%'; 

我要第一個查詢結果加上第二查詢結果相結合。我怎麼能以更快的方式做到這一點?

@Fosco您的查詢似乎工作,但如果我想添加一個搜索功能的所有結果item.name?我試過這個,但它仍然獲得全部fb_item_promo.item_id結果。

新查詢:

SELECT item.id, item.name, item.description, item.tnURL,item.spec_id, 
item.item_type, item.sub_category 
FROM item 
LEFT JOIN fb_item_promo 
ON fb_item_promo.item_id = item.id 
WHERE fb_item_promo.item_id IS NOT NULL 
OR item.description LIKE '%package%' 
AND item.name LIKE '%my item name%' 

結果是它尋找合適的項目,但仍回報所有項目fb_item_promo.item_id是存在。我如何在結果上運行過濾器?

回答

3

這是沒有意義的,從第一個查詢與第二查詢的所有記錄,加上記錄。第二個查詢中的記錄已經包含在第一個中。

我想這是你所需要的:

SELECT item.id, item.name, item.description, 
     item.tnURL, item.spec_id, item.item_type, 
     item.sub_category 
FROM item 
left JOIN fb_item_promo ON fb_item_promo.item_id=item.id 
WHERE fb_item_promo.item_id is not null 
    or item.description LIKE '%package%' 
+0

關於使用'UNION ALL'解決方案的觀點,你可以返回重複的記錄(這可以通過使用'UNION'來緩解)被採取。但是,您的解決方案存在更嚴重的問題:它排除了fb_item_promo中不存在的記錄。 – RedFilter 2011-05-25 19:42:49

+0

@RedFilter啊很好的捕捉...更新。 – Fosco 2011-05-25 19:43:46

+0

@Fosco這似乎工作。如果我想將item.name的搜索函數添加到聯合查詢的所有結果中,該怎麼辦?像「AND item.name LIKE'%任何項目名稱%'」我該怎麼做?謝謝! – tiltdown 2011-05-25 22:20:03

3
SELECT item.id, item.name, item.description, item.tnURL, 
item.spec_id, item.item_type, item.sub_category 
FROM 
item, fb_item_promo WHERE fb_item_promo.item_id=item.id; 

UNION ALL 

SELECT item.id, item.name, item.description, item.tnURL, 
item.spec_id, item.item_type, item.sub_category 
FROM 
item WHERE item.description LIKE '%package%'; 
1
select item.id, 
     item.name, 
     item.description, 
     item.tnURL, 
     item.spec_id, 
     item.item_type, 
     item.sub_category 
     from 
     item 
inner join 
     fb_item_promo on item.id = fb_item_promo.item_id 
where 
     item.description like '%package%' 
1

您可以在一個查詢做到這一點沒有UNION

select i.id, 
    i.name, 
    i.description, 
    i.tnURL, 
    i.spec_id, 
    i.item_type, 
    i.sub_category 
from item i 
left join fb_item_promo ip on i.id = ip.item_id 
where ip.item_id is not null 
    or i.description LIKE '%package%'; 
1

,你可以使用子查詢,而不是一個innerjoin:

SELECT item.id, item.name, item.description, 
    item.tnURL, item.spec_id, item.item_type, item.sub_category 
FROM item 
WHERE item.description LIKE '%package%' 
AND item.id IN (SELECT item_id FROM fb_item_promo);