MySQL 查询一列中具有相同值而另一列中具有不同值的行

时间:2020-12-23 19:33:26

标签: mysql sql

我必须找到只销售一种特定产品的商店

我必须加入 3 个表才能获取所有信息 这是连接表的样子

Store | Product | 
----------------
A     | Juice   | Mon
A     | Milk    | Mon
A     | Milk    | Tue
B     | Juice   | Mon
B     | Beer    | Tue
B     | Milk    | Wed
B     | Beer    | Thu
C     | Beer    | Mon
D     | Beer    | Thu
D     | Beer    | Fri

我想要销售啤酒的商店,在这种情况下显然是 C 和 D。 如何编写可以过滤掉这些商店的查询?

3 个答案:

答案 0 :(得分:0)

您可以使用聚合:

select store
from t
group by store
having min(product) = max(product);

答案 1 :(得分:0)

首先按店铺分组,然后查看店铺销售的产品数量。

SELECT Store, Count(Product) AS pcount
FROM joined_table 
GROUP BY Store
HAVING pcount=1;

答案 2 :(得分:0)

您可以在 HAVING 子句中设置条件:

SELECT store
FROM (<your query here>) t
GROUP BY store
HAVING SUM(product <> 'beer') = 0;

条件 SUM(product <> 'beer') = 0 过滤掉所有销售除 'beer' 以外的任何商品的商店。