gpt4 book ai didi

mysql - 3 个表的 SQL 初学者查询逻辑

转载 作者:行者123 更新时间:2023-11-28 23:51:17 25 4
gpt4 key购买 nike

sql表如下:likes列drinker和beer,sells列bar和beer,frequents列drinker和bar。

我之前已经回答过以下陈述:

"Drinkers who frequent bars which serve some beer they like"

使用 SQL 查询:

SELECT DISTINCT y.drinker
FROM likes a, sells, frequents y
WHERE a.beer = sells.beer
AND sells.bar = y.bar
AND y.drinker = a.drinker;

现在,我正在尝试修改上面列出的查询以回答类似但不同的陈述:

"Drinkers who only frequent bars which serve beers they like"

从逻辑上讲,修改是只包括那些经常光顾提供他们喜欢的啤酒的酒吧的人,并排除那些光顾任何不提供他们喜欢的啤酒的酒吧的人。

我最难修改上述查询以满足第二个语句。

我的思考过程可能是做一个双重否定,例如:获取以下组中不存在的饮酒者列表:不经常光顾不出售他们喜欢的啤酒的酒吧的饮酒者。但正确的实现方式让我不知所措。

这是我解决此查询的最佳尝试,但我很清楚这是不正确的,因为此查询仍然会返回经常光顾(不仅)提供他们喜欢的啤酒的酒吧的饮酒者:

SELECT distinct x.drinker
FROM frequents x
WHEREexists (SELECT*
FROM frequents y, sells z, likes u
WHERE x.drinker=y.drinker
AND y.bar = z.bar and z.beer = u.beer
AND y.drinker = u.drinker);

任何帮助都会很棒,感谢您提供的任何见解。

最佳答案

我认为这是一个有效的解决方案...

子查询用于过滤掉经常光顾他们喜欢的啤酒数量为 0 的酒吧的饮酒者。

select distinct drinker 
from frequents
where drinker not in (
select f.drinker
from frequents f
join sells s on f.bar = s.bar
left join likes l on l.drinker = f.drinker and l.beer = s.beer
group by f.drinker, f.bar
having count(l.drinker) = 0
);

Sample SQL Fiddle

关于mysql - 3 个表的 SQL 初学者查询逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32554141/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com