检查一个表中的某个值是否引用另一个表上的所有可能行

时间:2017-08-01 08:07:15

标签: mysql sql

我有一个名为"buys"的表,其中包含clientIDitemName以及其他irrelvent列,另一个表"item"包含"itemName"和{{1} }} 列。 我需要一个查询,在itemType表中显示所有购买所有可能项目的客户,而不使用计数功能。 我尝试使用"item""exist",但无法找到使用它的方法。

  

SELECT * from buys;

"not exists"
  

SELECT * from item;

 cid | rno | iname        | amount 
-----+-----+--------------+-------- 
   2 |   1 | orange juice | 2 
   1 |   2 | orange juice | 1 
   2 |   1 | macchiato    | 2
   1 |   3 | macchiato    | 1
   1 |   1 | cappuccino   | 500
   1 |   2 | cappuccino   | 500 

1 个答案:

答案 0 :(得分:0)

如果您知道项目表中有3个项目,那么您可以这样做:

select cid from buys group by cid 
having count(distinct iname) = 3;

或者如果您喜欢嵌套

select cid from buys group by cid 
having count(distinct iname) = (select count(iname) from item);

如果你真的想要一些没有count的东西,不是一个好的查询但是有效:

select cid from buys group by cid
having group_concat(distinct iname order by iname) like 'cappuccino,macchiato,orange juice'

请记住在匹配项中按名称排序项目,请参阅上面的查询