直接跳转,这是MySQL查询不起作用:
SELECT S.pub
FROM serves S
WHERE NOT EXISTS ( SELECT L.beer
FROM likes L
WHERE L.drinker = "Joe" AND L.beer NOT IN ( SELECT S.beer
FROM S));
此查询的目的是选择提供Joe喜欢的所有啤酒的酒吧。但是,当我尝试执行它时,我得到一个错误,表示表S不存在(由“SELECT S.beer FROM S”引起)。但我将S别名为外部FROM子句中的serve表的实例。我做错了什么?
对我而言,我使用NOT EXISTS而不是IN似乎过于复杂。是否有更优雅的方式来构建此查询?
顺便说一下,这是数据库架构:
LIKES(drinker,beer);
FREQUENTS(drinker,pub);
SERVES(pub,beer,cost);
此外,这个问题与我的作业有关,所以请在回答问题时考虑到这一点。谢谢。
答案 0 :(得分:1)
你应该使用join
SELECT S.pub FROM SERVES S INNER JOIN LIKES L ON L.drinker = "Joe" AND L.beer= S.beer;
我认为这会有助于解决您的问题或
您可以使用此
SELECT S.pub
FROM serves S
WHERE NOT EXISTS ( SELECT L.beer
FROM likes L
WHERE L.drinker = "Joe" AND L.beer IN ( SELECT SS.beer
FROM serves SS));