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 列は Datetime 型です

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は相互に排他的(同時に両方にすることはできません)であり、集合的に網羅的(そのうちの1つである必要があります)であるため、XOR演算を使用できます。SQL Serverについてはよくわかりませんが、次の^演算子を使用していると思います。

WHERE col1 IS NULL ^ col2 IS NULL

これは基本的に「col1がnull、またはcol2がnullですが、両方ではありません」と言います。

参照:

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

于 2012-12-28T07:36:34.250 に答える
1

いずれかがそうであればcolumnnot 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 に答える