【问题标题】:How to select rows with multiple AND/OR statements in MySQL?如何在 MySQL 中选择具有多个 AND/OR 语句的行?
【发布时间】:2019-07-15 15:53:43
【问题描述】:

我的数据集中有以下列:

.1. Goal
.2. Quarter
.3. Year

我有 4 个季度:1,2,3,4

我有 4 年:2015 年、2016 年、2017 年、2018 年

我想选择所有目标,除了 2019-QTR3 和 2019-QTR4

我用过Where语句,比如:

SELECT * from Table
WHERE 
(`Year` <> "2019" and `Quarter Name` <> "QTR3")
OR (`Year` <> "2019" and `Quarter Name` <> "QTR4")

但结果,所有以 2019 为年份,或以 QTR3 或 QTR4 为季度的行都没有被选中,这不是我想要的

SELECT
* FROM Table

WHERE 
(`Year` <> "2019" and `Quarter Name` <> "QTR3")
OR (`Year` <> "2019" and `Quarter Name` <> "QTR4")

我的查询结果根本不包括 2019 年。它们也不包括 QTR3 和 ATR4(无论年份)。我不想要那个

【问题讨论】:

  • I have 4 Quarters: 1,2,3,4 你应该,但你没有!

标签: mysql sql


【解决方案1】:

您的要求是:

SELECT * from Table
WHERE 
NOT (`Year` = "2019" AND `Quarter Name` = "QTR3")
AND
NOT (`Year` = "2019" AND `Quarter Name` = "QTR4")

或使用 IN 运算符:

SELECT * from Table
WHERE NOT (`Year` = "2019" AND `Quarter Name` IN ("QTR3", "QTR4"))

相当于:

SELECT * from Table
WHERE 
(`Year` <> "2019" OR `Quarter Name` <> "QTR3")
AND
(`Year` <> "2019" OR `Quarter Name` <> "QTR4")

或:

SELECT * from Table
WHERE (`Year` <> "2019" OR `Quarter Name` NOT IN ("QTR3", "QTR4"))

【讨论】:

  • 您能否解释一下我的代码错误的原因。您做了同样的事情,但使用了不同的运算符
  • 逻辑在我的第一个查询中。您需要没有 2019 年和季度 qrt3 的行以及没有 2019 年和季度 qrt4 的行。这是我的第一个查询,如果您了解一点布尔代数,它可以写成 3d。
  • 你是山羊
【解决方案2】:

我想选择所有目标,除了 2019-QTR3 和 2019-QTR4

您可以将NOT IN 与元组一起使用:

SELECT * from `Table`
WHERE (`Year`, `Quarter Name`) NOT IN ( ('2019', 'QTR3'),  ('2019', 'QTR3'))

【讨论】:

    【解决方案3】:

    如果你这样做了

    SELECT * from Table WHERE Year <> "2019" or (Quarter Name <> "QTR3" AND Quarter Name <> "QTR4")
    

    应该适合你。 已编辑

    【讨论】:

    • 不,它仍在踢出所有 2019 年的值。虽然现在它保留了 QTR3 和 QTR4 值
    • 您需要在此查询中将AND 替换为OR 并将OR 替换为AND
    猜你喜欢
    • 2012-08-18
    • 2020-01-06
    • 2011-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-01
    • 2021-01-20
    相关资源
    最近更新 更多