MySQL 如何获取与同一列中另一个组的值匹配的组?
MySQL how to get the group that match the value of another group in the same column?
Here are the tables:
Drinker (name, address)
Bar (name, address)
Beer (name, brewer)
Frequents (drinker, bar, times_a_week)
Likes (drinker, beer)
Serves (bar, beer, price)
而且,问题是这样的:
找到那些与 Silvie Hume 喜欢同一组啤酒的饮酒者。
我的代码如下:
SELECT *
FROM drinker d
JOIN likes l1 ON d.Name = l1.Drinker
WHERE l1.Beer IN (SELECT Beer FROM likes l2 WHERE l2.Drinker = 'Silvie Hume');
好像我的输出return all drinks that match one of beers Silvie Hume like,我不知道如何select喜欢和Silvie Hume同一套啤酒的饮酒者.有什么帮助吗?谢谢!
我尝试用 = ALL
替换 IN
,但它也没有用
一个选项在 Likes
table:
上使用自联接
SELECT
t1.drinker
FROM Likes t1
LEFT JOIN Likes t2
ON t1.beer = t2.beer AND t2.drinker = 'Silvie Hume'
WHERE
t1.drinker <> 'Silver Hume'
GROUP BY
t1.drinker
HAVING
COUNT(*) = COUNT(t2.beer) AND
COUNT(*) = (SELECT COUNT(*) FROM Likes WHERE drinker = 'Silvie Hume');
作为解释,HAVING
子句中的第一个条件断言所有给定饮酒者的喜好都与 Silvie Hume 的喜好相匹配。第二个条件涵盖了给定饮酒者的所有喜好都匹配的边缘情况,但 Silvie Hume 也有其他一些喜好。因此,我们断言每个饮酒者的点赞数与 Silvie Hume 相同。
Here are the tables:
Drinker (name, address)
Bar (name, address)
Beer (name, brewer)
Frequents (drinker, bar, times_a_week)
Likes (drinker, beer)
Serves (bar, beer, price)
而且,问题是这样的:
找到那些与 Silvie Hume 喜欢同一组啤酒的饮酒者。
我的代码如下:
SELECT *
FROM drinker d
JOIN likes l1 ON d.Name = l1.Drinker
WHERE l1.Beer IN (SELECT Beer FROM likes l2 WHERE l2.Drinker = 'Silvie Hume');
好像我的输出return all drinks that match one of beers Silvie Hume like,我不知道如何select喜欢和Silvie Hume同一套啤酒的饮酒者.有什么帮助吗?谢谢!
我尝试用 = ALL
替换 IN
,但它也没有用
一个选项在 Likes
table:
SELECT
t1.drinker
FROM Likes t1
LEFT JOIN Likes t2
ON t1.beer = t2.beer AND t2.drinker = 'Silvie Hume'
WHERE
t1.drinker <> 'Silver Hume'
GROUP BY
t1.drinker
HAVING
COUNT(*) = COUNT(t2.beer) AND
COUNT(*) = (SELECT COUNT(*) FROM Likes WHERE drinker = 'Silvie Hume');
作为解释,HAVING
子句中的第一个条件断言所有给定饮酒者的喜好都与 Silvie Hume 的喜好相匹配。第二个条件涵盖了给定饮酒者的所有喜好都匹配的边缘情况,但 Silvie Hume 也有其他一些喜好。因此,我们断言每个饮酒者的点赞数与 Silvie Hume 相同。