问题描述
|
我有第一个查询。
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%\'