如何在单个Where子句SQL中包含多个条件

时间:2018-06-14 18:31:42

标签: sql where-clause

以下查询即将完成。但是,我试图在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的记录。

3 个答案:

答案 0 :(得分:5)

尝试这样写:

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

答案 1 :(得分:0)

我在另一个帖子上发现了这个:

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

SELECT *, 案件 当currentdoctype ='PUSH'和CurrentDocEntry = 15那么'c1' ELSE'c2' 结束为com_con FROM table_name WHERE BaseDocEntry = 15 AND BaseDocType ='PRRH'和ItemCode ='TestStudy2'    AND WhseCode ='01'AND com_con ='c2';

有效。

这是针对DB2的

答案 2 :(得分:0)

如果是PostgreSQL

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

您可以轻松添加更多排除项,例如fiddle