MySQL关系部门

时间:2013-11-30 16:23:54

标签: mysql relational-division

我很难解决这个问题:

那里有一家餐厅,供应所有他们最喜欢的啤酒。

(是的,我们实际上在学校有这个:D)

我有2个可以使用的表:

  • 表1:Favoritebeer(姓名,姓氏,啤酒名)
  • 表2:OnStock(啤酒名称,餐厅,数量)

我的解决方案是:OnStock%Favoritebeer

在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

1 个答案:

答案 0 :(得分:4)

尝试一下:

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 |

小提琴here