【问题标题】:How to include multiple criteria in a single Where Clause SQL如何在单个 Where 子句 SQL 中包含多个条件
【发布时间】:2018-06-14 18:31:41
【问题描述】:

以下查询几乎完成。但是,我试图在 where 子句中包含一个条件,该条件考虑了三列中的值,从而将排除与三列中所述值匹配的任何记录,任何其他可能具有一个或两个值但不是全部的记录三个包含在输出中。到目前为止,没有运气:

SELECT
PRODUCT_ID,
UPC, 
CLEANSED_BRAND,
CLEANSED_TITLE,
DIVISION_ID,
DEPARTMENT_ID,
VENDOR_ID

FROM ATTRIBUTE
WHERE (DIVISION_ID <>37 AND DEPARTMENT_ID <>377 AND VENDOR_ID<>534)

由于某种原因,此 WHERE 子句将 AND 视为 OR,因为输出排除了任何具有 DIVISION_ID 37、DEPARTMENT_ID 377 或 VENDOR_ID 534 的记录。

它旨在仅排除 DIVISION_ID = 37 AND DEPARTMENT_ID = 377 AND VENDOR_ID = 534 的记录。

【问题讨论】:

  • 能否提供样本数据和样本预期输出
  • 标记您正在使用的 DBMS(即MySQLSQL Server 等)。

标签: sql where-clause


【解决方案1】:

试着这样写:

WHERE NOT (DIVISION_ID = 37 AND DEPARTMENT_ID = 377 AND VENDOR_ID = 534)

没有NOT 的等效逻辑是:

WHERE DIVISION_ID <> 37 OR DEPARTMENT_ID <> 377 OR VENDOR_ID <> 534

【讨论】:

    【解决方案2】:

    如果是 PostgreSQL

    WHERE (DIVISION_ID, DEPARTMENT_ID, VENDOR_ID) NOT IN ((37, 377, 534))
    

    您可以像fiddle 一样轻松添加更多排除项

    【讨论】:

      【解决方案3】:

      我在另一个帖子上找到了这个:

      在某些情况下 NOT 不起作用,您可以使用简单的 case 和 where 子句来解决它。这将仅排除currentdoctype ='PUSH' AND CurrentDocEntry = 15 的情况。

      SELECT *,
      CASE
      WHEN currentdoctype ='PUSH' AND CurrentDocEntry = 15 THEN 'c1'
      ELSE 'c2'
      END AS com_con
      FROM table_name
      WHERE  BaseDocEntry=15 AND BaseDocType='PRRH' AND ItemCode='TestStudy2'
         AND WhseCode='01' AND com_con = 'c2';
      

      它有效。这是为 DB2 设计的

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-04-25
        • 2019-02-09
        • 2012-05-06
        • 2015-09-29
        • 2019-11-16
        • 2014-02-25
        • 2022-01-17
        • 2019-03-01
        相关资源
        最近更新 更多