2017-02-07 13 views
5

現在、SELECTクエリが何も返さないかどうかを検出できるSQLクエリを実行しようとしています。SQL - 選択肢が何も返されない場合、別の選択を実行します。

IF SELECT * FROM table WHERE criteria = criteria RETURNS NO ROWS 
THEN SELECT * FROM table WHERE criteria2 = criteria2 

これが可能である:ここで

は、私が何を意味するかですか?空の返信は「null」とカウントされないと思いますので、少し問題があります。

SELECT * 
FROM table 
WHERE criteria = criteria 
UNION ALL 
SELECT * 
FROM table 
WHERE criteria2 = criteria2 AND 
     NOT EXISTS (SELECT 1 FROM table WHERE criteria = criteria); 
+4

使用しているデータベースはどれですか? –

+0

私はPostgreSQLを使用しています。以下の解決策がそれに対応しました。 –

答えて

6

SELECT * FROM table WHERE criteria2 = criteria2 
and not exists (
    SELECT * FROM table WHERE criteria = criteria 
) 
union all 
SELECT * FROM table WHERE criteria = criteria; 

ここNOT EXISTSはUNION ALLの一部のいずれかが返されることを保証します。 2番目のcriteria = criteriaが成功すると、NOT EXISTSはfalseを返します。したがって、上記のクエリの2番目の部分だけが結果を返します。そうでなければ、criteria = criteriaの行がなく、NOT EXISTSがtrueを返し、したがって最初の部分だけがデータを返します。

+0

ありがとうゴードン、これは実際にうまくいきました。あなたは獣です。 :) –

3

あなたはNOT EXISTSを使用することができます:あなたは列が同じであると仮定すると、1つのステートメントでこれを行うことができます

+0

説明のためにありがとう、Gurwinder。 :)理解しやすくなりました。 –

関連する問題