如何将这两个查询合并为一个查询?

问题描述

| 我有一个查询
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.sub_category  
FROM item 
WHERE item.description LIKE \'%package%\';
我需要结合第一个查询结果和第二个查询结果。我该如何以更快的方式做到这一点? @Fosco您的查询似乎有效,但是如果我想向item.name上的所有结果添加搜索功能怎么办?我尝试了这个,但仍然得到了所有fb_item_promo.item_id结果。 新查询
SELECT item.id,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上的所有项目。如何对该结果运行过滤器?     

解决方法

包括第一个查询的所有记录,加上第二个查询的记录,这没有任何意义。来自第二个查询的记录将已经包含在第一个查询中。 我认为这是您需要的:
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%\'
    ,
SELECT item.id,item.sub_category 
FROM 
item,fb_item_promo WHERE fb_item_promo.item_id=item.id;

UNION ALL

SELECT item.id,item.sub_category
FROM 
item WHERE item.description LIKE \'%package%\';
    ,您可以在没有
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%\';
    ,您可以使用子查询而不是innerjoin:
SELECT item.id,item.sub_category  
FROM item
WHERE item.description LIKE \'%package%\'
AND item.id IN (SELECT item_id FROM fb_item_promo);
    ,
select item.id,item.sub_category
       from 
       item 
inner join
       fb_item_promo on item.id = fb_item_promo.item_id
where 
       item.description like \'%package%\'