MySQL相关查询混淆

时间:2018-03-05 05:30:30

标签: mysql

直接跳转,这是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);

此外,这个问题与我的作业有关,所以请在回答问题时考虑到这一点。谢谢。

1 个答案:

答案 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));