私はさまざまな方法で試しましたが、これまでのところ幸運はありませんでした。SQL Server multipleが存在するすべてのテーブルに、メインテーブルのNULL条件があります。
私は表1、表2、表3及び表4が空でない場合は、この
SELECT *
FROM MainTable
WHERE exists (SELECT NULL FROM Table1.Column1 = MainTable.Column1 OR MainTable.Column1 is NULL)
AND exists (SELECT NULL FROM Table2.Column2 = MainTable.Column2 OR MainTable.Column2 is NULL)
AND exists (SELECT NULL FROM Table3.Column3 = MainTable.Column3 OR MainTable.Column3 is NULL)
AND exists (SELECT NULL FROM Table4.Column4 = MainTable.Column4 OR MainTable.Column4 is NULL)
ようなクエリは、これが正常に動作しています。実際の問題は、Table1、Table2、Table3、Table4のいずれかが空で、対応するManinTable列がNULLの場合に発生し、そのレコードは無視されます。 Is Null
の条件が実行されないため、レコードは存在しないとみなされます。私はIs Null
の状態が存在していなくても()同様にクエリが間違った結果を返すので、それを取ることができません。
Table1、Table2、Table3、Table4に存在するMainTableから、また対応する列がnullのレコードを取得したいとします。
編集:次は、自分でテストして実行できるサンプルデータとクエリです。私の問題を再現するには、挿入クエリをTable4にコメントアウトしてから実行してください。これで、Table4が空であり、MainTableのNullが実行されないためレコードが返されません。だから私は結果を得ることはありません。
CREATE Table #MainTable (Column1 INT NULL, Column2 INT NULL, Column3 INT NULL, Column4 INT NULL)
CREATE Table #Table1 (Column1 INT, Column2 INT, Column3 INT, Column4 INT)
CREATE Table #Table2 (Column1 INT, Column2 INT, Column3 INT, Column4 INT)
CREATE Table #Table3 (Column1 INT, Column2 INT, Column3 INT, Column4 INT)
CREATE Table #Table4 (Column1 INT, Column2 INT, Column3 INT, Column4 INT)
INSERT INTO #MainTable VALUES(1,2,3,NULL)
INSERT INTO #Table1 VALUES(1,2,3,4)
INSERT INTO #Table2 VALUES(1,2,3,4)
INSERT INTO #Table3 VALUES(1,2,3,4)
INSERT INTO #Table4 VALUES(1,2,3,4)
SELECT *
FROM #MainTable
WHERE exists (SELECT NULL FROM #Table1 WHERE Column1 = #MainTable.Column1 OR #MainTable.Column1 is NULL)
AND exists (SELECT NULL FROM #Table2 WHERE Column2 = #MainTable.Column2 OR #MainTable.Column2 is NULL)
AND exists (SELECT NULL FROM #Table3 WHERE Column3 = #MainTable.Column3 OR #MainTable.Column3 is NULL)
AND exists (SELECT NULL FROM #Table4 WHERE Column4 = #MainTable.Column4 OR #MainTable.Column4 is NULL)
Drop TABLE #MainTable
Drop TABLE #Table1
Drop TABLE #Table2
Drop TABLE #Table3
Drop TABLE #Table4
サンプルデータと予想される結果を投稿するにはどうしたらいいですか? – GuidoG
"これは、Table1、tabl2、Tabl3、Table4が空でないときは正常に動作します" - 投稿したコードがどのシナリオでも機能するとは思えない。私の推測では、 "exist"の代わりに "left outer join"が必要ですが、GuidoGが投稿したサンプルデータと期待される結果は、私たちがあなたを助けるのに役立ちます:) –
私は自分の答えを編集し、あなたは自分でそれを実行し、それを一瞬でテストすることができます。これは大規模なシステムの一部であり、ジョインで簡単に置き換えることはできないので、私はジョインを使用できません。 – Inayat