我正在努力学习如何正确地使用NOT EXISTS及其背后的逻辑。我有一个疑问:
酒吧是每个饮酒者常去的地方
与此frequents表一起:

从表上看,我知道结果应该是Blue Angel。我从这样的事情开始(这并没有给我想要的东西):
SELECT f.bar
FROM frequents f
WHERE NOT EXISTS(
SELECT ff.drinker
FROM frequents ff
WHERE f.drinker <> ff.drinker
AND f.bar = ff.bar
);因此,如果f.bar是“A.P.Stump‘s”,我必须检查表中的其他名称是否也经常出现“A.P.Stump’s”。我好像想不出该怎么做。
我该怎么做?请注意,我必须在查询中使用NOT EXISTS。
发布于 2016-09-24 23:38:01
我会用group by和having来做这个
select bar
from frequents b
group by bar
having count(*) = (select count(distinct drinker) from frequents);这个查询只是计算每个酒吧的饮酒者人数。如果计数与饮酒者总数相匹配,则"bar“通过并在结果集中。
这假设frequents表没有bar/drinker的重复行。如果是这样,请使用count(distinct drinker)而不是count(*)。
虽然这可以作为一个NOT EXISTS查询(实际上,在查询中有两个NOT EXISTS ),但我发现这样做是没有用的。如果您正在学习SQL,嵌套NOT EXISTS是一个有趣的思想练习。聚合更加灵活,可以解决范围更广的问题(例如,大多数饮酒者经常光顾多少酒吧)。
https://stackoverflow.com/questions/39681802
复制相似问题