我将如何在一个查询中加入这两个查询?

时间:2011-05-25 19:30:02

标签: php mysql sql database-design

我有第一个查询。

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 上的所有项目。如何在该结果上运行过滤器?

5 个答案:

答案 0 :(得分: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 :(得分: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%'

答案 2 :(得分: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%'

答案 3 :(得分: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%';

答案 4 :(得分:1)

你可以使用子查询而不是内连接:

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);