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