我在解决一项练习时遇到困难:
对于哪些人来说,有一家餐厅,提供他们最喜欢的所有啤酒。
(是的,我们学校里确实有这个:D)
我有 2 个可以使用的表:
- 表1:Favoritebeer(名字、姓氏、啤酒名)
- 表2:OnStock(啤酒名称、餐厅、数量)
我的解决方案是:OnStock % Favouritebeer
MySQL 中没有 DIVISION 这样的东西。我有什么想法可以解决这个问题吗?我在维基百科上找到了以下内容:http://en.wikipedia.org/wiki/Relational_algebra#Division_.28.C3.B7.29这正是我所需要的,但我在将其翻译为 SQL 时遇到困难。
编辑:
这里是示例数据:http://www.sqlfiddle.com/#!2/34e00
结果应该是:
Bucher Rolf
Mastroyanni Pepe
Meier Hans
Meier Hanspeter
Meier Hansruedi
Müller Heinrich
Peters Peter
Zarro Darween
最佳答案
尝试一下:
SELECT DISTINCT fb1.name, fb1.surname FROM favoriteBeer fb1
JOIN stock s ON fb1.beerName = s.beerName
GROUP BY fb1.name, fb1.surname, s.restaurant
HAVING COUNT(*) = (
SELECT COUNT(*) FROM favoriteBeer fb2
WHERE fb1.name = fb2.name AND fb1.surname = fb2.surname
)
输出:
| NAME | SURNAME |
|-------------|-----------|
| Bucher | Rolf |
| Mastroyanni | Pepe |
| Meier | Hans |
| Meier | Hanspeter |
| Meier | Hansruedi |
| Müller | Heinrich |
| Peters | Peter |
| Zarro | Darween |
fiddle here .
关于MySQL关系划分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20302581/