【问题标题】:SQL Query Using Minus/Not Exists使用减号/不存在的 SQL 查询
【发布时间】:2015-09-12 19:53:19
【问题描述】:

我要查询这条语句:

Drinkers who do not frequent the bar Henrys

现在,我知道我不能使用这样的简单查询:

SELECT dinker
FROM frequents
WHERE bar <> 'Henrys';

因为如果一个人去 Henrys 酒吧并且也经常光顾其他酒吧怎么办?此人仍将包含在结果中。此查询仅过滤掉只经常光顾 Henrys 酒吧的人。

我尝试使用 MINUS 运算符,但在 MySQL 中它似乎不支持该查询:

SELECT drinker 
FROM frequents
MINUS
SELECT drinker
FROM frequents
Where bar = 'Henrys';

我想尝试使用 NOT EXISTS 重写它,但似乎无法让它工作或正确思考逻辑。

【问题讨论】:

    标签: mysql sql querying


    【解决方案1】:
    select drinker
      from frequents f
     where not exists (select 1
              from frequents x
             where x.drinker = f.drinker
               and x.bar = 'Henrys');
    

    【讨论】:

    • 你能解释一下“select 1”的作用吗?
    • exists 或 not exists 条件测试子查询是否返回行。因此,您可以在选择列表中放置任何内容。它不会改变子查询是否会返回行,因此它作为存在或不存在子查询的使用不受影响。选择“x”或“fish”或“dog”也可以。
    【解决方案2】:

    查找所有去亨利酒吧的饮酒者,然后选择不属于该数组的饮酒者

    SELECT drinker
    FROM frequents
    WHERE drinker NOT IN (SELECT drinker FROM frequents WHERE bar = 'Henrys')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-12
      • 2014-06-16
      • 2015-05-01
      • 2014-05-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多