4

1 つの列 (RecordID) を持つ次のテーブルがあります。

TableOne
101
102
103
104
105
106

TableTwo
101
102
103
104

TableTwo が空でない場合にのみ、それらの間を結合したい。これは、サンプルの IF ステートメントで実行できますが、私の実際の状況では、これは多くのコードの重複につながります。

私は次のことを試しました:

SELECT * FROM
TableOne T1
WHERE exists (select 1 from TableTwo where T1.RecordID=RecordID)
      and exists (select 1 from TableTwo)

this answerを使用しますが、同じロジックが機能しません-2番目のテーブルが空でない場合にのみ機能し、空の場合は何も返されません。

これが可能かどうか知っている人はいますか?

4

1 に答える 1

6

に行がない場合は、すべてを選択するとしますTableTwo。あなたはORとが必要ですNOT EXISTS

SELECT 
   T1.* 
FROM
   TableOne T1
WHERE 
   EXISTS(SELECT 1 from TableTwo WHERE T1.RecordID=RecordID)
   OR NOT EXISTS(SELECT 1 FROM TableTwo)

SQL-フィドル

于 2013-01-07T11:39:04.817 に答える