2011-05-25 60 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);