对多列使用IS NOT NULL

New*_*bie 9 sql-server

我想检查WHERE子句中单个SQL语句中多列的is not null约束,有没有办法这样做?另外,我不想要NOT NULL在列定义上强制执行类型约束.

SELECT * FROM AB_DS_TRANSACTIONS 
WHERE FK_VIOLATION IS NULL 
AND TRANSACTION_ID NOT IN(
    SELECT distinct TRANSACTION_ID FROM AB_TRANSACTIONS) 
AND COUNTRY_ID IS NOT NULL 
AND GEO_CUST_COUNTRY_ID IS NOT NULL 
AND INVOICE_DATE IS NOT NULL 
AND ABB_GLOBALID IS NOT NULL 
AND SALES_ORG_ID IS NOT NULL 
AND DIST_ID IS NOT NULL 
AND CUSTOMER_ID IS NOT NULL 
AND REPORT_UNIT_ID IS NOT NULL 
AND CURR_INVOICE IS NOT NULL 
AND DIVISION_CODE IS NOT NULL 
Run Code Online (Sandbox Code Playgroud)

因此,我不是一次又一次地使用IS NOT NULL,而是想简化一些事情

小智 17

SELECT * FROM AB_DS_TRANSACTIONS 
WHERE COALESCE(COUNTRY_ID,GEO_CUST_COUNTRY_ID,INVOICE_DATE,ABB_GLOBALID,SALES_ORG_ID,DIST_ID,CUSTOMER_ID,REPORT_UNIT_ID,CURR_INVOICE,DIVISION_CODE) IS NOT NULL
Run Code Online (Sandbox Code Playgroud)

  • 这是错误的,想法是检查所有通知的列是否不为空。Coalesce(null, null, null, not null) is not null 返回 true,因为最后一个值不为 null,但想法是检查所有值。 (15认同)

Raj*_*aju 9

您可以使用

SELECT * FROM table1 
WHERE NOT (Column1 IS NULL OR 
Column2 IS NULL OR
 Column3 IS NULL OR
 Column4 IS NULL
    IS NOT NULL)
Run Code Online (Sandbox Code Playgroud)

根据OP评论,更新答案

使用INSERT和SELECT子查询插入行

INSERT INTO Table_A
    SELECT column1, column2, column3,column4 
    FROM Table_B 
    WHERE NOT (Column1 IS NULL OR 
    Column2 IS NULL OR
    Column3 IS NULL OR
    Column4 IS NULL
    IS NOT NULL);
Run Code Online (Sandbox Code Playgroud)

您的查询

我可以减少50个字符

SELECT * FROM AB_DS_TRANSACTIONS 
WHERE 
FK_VIOLATION IS NULL 
AND TRANSACTION_ID NOT 
IN(SELECT distinct TRANSACTION_ID FROM AB_TRANSACTIONS) 
AND 
NOT (
COUNTRY_ID IS NULL  
OR GEO_CUST_COUNTRY_ID IS NULL 
OR INVOICE_DATE IS NULL 
OR ABB_GLOBALID IS NULL 
OR SALES_ORG_ID IS NULL 
OR DIST_ID IS NULL 
OR CUSTOMER_ID IS NULL 
OR REPORT_UNIT_ID IS NULL 
OR CURR_INVOICE IS NULL 
OR DIVISION_CODE IS NULL
) 
Run Code Online (Sandbox Code Playgroud)


cam*_*ont 7

我认为您正在寻找的语法仅显示那些不为空的行是这个

SELECT * from table_B
where COLUMN1 is not null and COLUMN2 is not null and COLUMN3 is not null
Run Code Online (Sandbox Code Playgroud)

  • 是的,但这不是投票的目的。如果您认为自己的答案更好,则不能简单地否决其他人的答案。保持中立,让其他人投票赞成或反对。如果答案是计划不正确或错误,那就够了,但如果您认为自己的答案更好,那就不行了。让它保持中立。此外,这个问题现在已经更新了多次,有了更多的澄清,这可能会使德摩根定律的一些不寻常的使用稍微缩短,但绝对不是更简单或更好。 (4认同)