我是SQL的新手,所以我不确定在搜索时是否使用了正确的术语,但我想这已经被问过了。如果没有,我们走了。
参加示例表:
Cart Item Packer
Cart 1 Bananas Bob
Cart 1 Coffee Bob
Cart 1 Pizza Bob
Cart 2 Apples Bob
Cart 2 Peaches Bob
Cart 2 Berries Bob
Cart 1 Soda James
Cart 1 Bread James
然后我想知道咖啡是否被放入购物车中,包装商放入购物车的所有东西都是这样的:
Cart 1 Bananas Bob
Cart 1 Coffee Bob
Cart 1 Pizza Bob
我曾尝试过如下查询:
select cart, item, packer
from table
where packer in (select packer from table where item = 'Coffee')
但是我通常最终得到了购物车2的结果,因为,我想,当查询查找购物车2并且鲍勃显示有包装咖啡时,它会选择该结果。 然后当我用子车#替换子查询中的打包器时,我也得到了詹姆斯的结果。我甚至在子查询中尝试了子查询,如:
where packer (in select packer from table where item in(select item
from table where item = 'Coffee'))
我无法弄清楚如何隔离装有咖啡的购物车1包装工的结果。
答案 0 :(得分:2)
您可以使用匹配购物车和包装商条件的exists
来执行此操作。
select cart, item, packer
from table t1
where exists (select 1
from table t2
where t1.cart=t2.cart and t1.packer=t2.packer and t2.item = 'Coffee')
答案 1 :(得分:0)
select p1.*
from packer p1
join packer p2
on p2.packer = p1.packer
and p2.cart = p1.cart
and p2.item = 'Coffee'
答案 2 :(得分:0)
Vamsi的回答是正确的,也是最普遍的(我已经赞成了)。但是,某些数据库支持带有元组的in
,因此可以扩展您的方法。
关键是您需要配对cart
/ packer
:
select cart, item, packer
from table
where (cart, packer) in (select cart, packer from table where item = 'Coffee');
这是你正在做的最接近的版本。
答案 3 :(得分:0)
或者,您可以使用子查询,最终可能更容易设置和调试:
set @itemSearch = "coffee"; -- variable to make the query more easy to change
SELECT t.cart, t.item, t.packer
FROM (SELECT cart, packer
FROM TABLE_1
WHERE item = @itemSearch
) AS sub1
INNER JOIN TABLE_1 t ON ((sub1.cart = t.cart) AND
(sub1.packer = t.packer))
here是我用这个例子做的SQL Fiddle的链接。我添加了一行咖啡,以显示如果有两个带咖啡的推车,此查询将起作用。