1

在 SQL 中,我试图检查以下情况

WHERE (col1 is null and col2 is not null) or (col1 is not null and col2 is null)

有没有一种合乎逻辑的方法可以使这种情况更短?

我正在尝试做的事情的描述

我有 2 张桌子,每张桌子有 3 列

Table1(Ft)  Table2(Dt)
ID          ID
F1          D1
F2          D2
F3          D3

F 列是整数类型 D 列是日期时间类型

F1 correspondes to D1
F2 correspondes to D2
F3 correspondes to D3

我想选择 F 为空且 D 已填充或 D 为空且 F 已填充的行这是完整的代码,让它更短!

SELECT f1, 
       f2, 
       f3, 
       d1, 
       d2, 
       d3 
FROM   ftable Ft 
       INNER JOIN dtable Dt 
               ON Ft.ID= Dt.ID 
WHERE  ( ( ( d1 IS NULL 
             AND f1 IS NOT NULL ) 
            OR ( d1 IS NOT NULL 
                 AND f1 IS NULL ) ) 
          OR ( ( d2 IS NULL 
                 AND f2 IS NOT NULL ) 
                OR ( d2 IS NOT NULL 
                     AND f2 IS NULL ) ) 
          OR ( ( d2 IS NULL 
                 AND f2 IS NOT NULL ) 
                OR ( d3 IS NOT NULL 
                     AND f3 IS NULL ) ) ) 
4

3 回答 3

2

你可以试试

WHERE (ISNULL(col1) != ISNULL(col2))

哦,那是给 MySQL 的。对于 SQL Server,你可以试试这个:

WHERE (NULLIF(col1, col2) IS NOT NULL)
于 2012-12-28T07:34:47.387 回答
2

由于col1 IS NULLcolx IS NOT NULL是互斥的(不能同时是两者)并且共同穷举(必须是其中之一),您可以使用 XOR 操作。我对 SQL Server 不太了解,但我认为它使用了^运算符:

WHERE col1 IS NULL ^ col2 IS NULL

这基本上说“col1 为空,或 col2 为空,但不是两者”。

参考:

http://msdn.microsoft.com/en-us/library/ms190277.aspx

于 2012-12-28T07:36:34.250 回答
1

如果有任何一个,column那么not null你想显示结果。所以较短的query是:

select * from Table_Name WHERE col1 IS not NULL OR col2 IS not NULL

如果列是位类型,则:

select * from Table_Name WHERE col1 ^ col2
于 2012-12-28T07:52:44.080 回答