2017-10-23 40 views
0

2つのデータセットとの左結合を使用して、すべてが同じKeyフィールドを持つMaster Datasetに結合しようとしています。だから特別なことはない。 これらのセカンダリデータセットのうちの1つは、別のクエリの結果であり、そのために存在する場合と存在しない場合があります。明らかに、このテーブルが存在しない場合、私のJOINステートメントは失敗します。LEFT JOINのデータセットが存在する場合と存在しない場合

実際に単純化されたバージョンのコードの下では、JOINを使用してテーブルbまたはcに存在する行をtable_aから除外します(存在する場合)。

SELECT     a.id, a.name 
FROM     table_a a 
LEFT JOIN    table_b b 
ON      a.id = b.id 
LEFT JOIN    table c c 
ON      a.id = c.id 
WHERE     b.id IS NULL 
AND     c.id IS NULL; 
+0

そして何が問題なのですか? – Shadow

+0

おそらく、そのテーブルの1つが存在しない場合、自動的に失敗しないクエリの書き方です。それは言った:_ "それらの二次データセットの1つは、別のクエリの結果であり、そのために存在してもいなくてもよい"ということです。それはあいまいに聞こえ、おそらくデザインの匂いに似ています。 –

+0

私は詳しく説明します: 私たちのBIプラットフォームであるSFTPサーバー上のファイルを毎日のベースで受信し、このファイルをピックアップしてDAILYデータセットに変換します。ただし、その日のファイルがない場合は、 DAILYデータセットもありません。 私が作成しようとしているSQLスクリプトは、HISTORYテーブルを作成および維持し、HISTORYデータセットには存在しないDAILYデータセットの行を追加します。両方のデータセットに存在する行を更新します。 –

答えて

0

私はよくあなたの質問を理解していることを確認していないが、私はあなたが良くやるべきだと思う:

SELECT a.id,a.name 
FROM table_a a 
WHERE a.id NOT IN 
(SELECT id FROM table_b) 
AND a.id NOT IN 
(SELECT id FROM table_c) 

任意のクエリオプティマイザは、この要求にまったく同じ性能を持つ必要があり、私は見つけますそれはずっと読みやすい。

+0

Matthieuさん、ありがとうございました。構文を読むのは簡単ですが、その日にtable_cが存在しない場合の問題は「テーブルが存在しません」というエラーになります –

関連する問題