2017-02-28 8 views
1

私は基本的にDB内に2つのテーブルを持っていますが、希望の効果のためにこれらを一緒に結合する必要があると思う日付テーブルもあります。SQL 3つのテーブルが重複しないヌル値を保持する

FOOS

date  | foos 
------------------ 
2016-01-01 2 
2016-01-02 3 
2016-01-03 4 

バー

date  | bars 
------------------ 
2016-01-02 9 
2016-01-03 8 
2016-01-04 7 

日付

dates 
---------- 
2016-01-01 
2016-01-02 
2016-01-03 
2016-01-04 
... 

DES私の日付のテーブルを選択している私が現在やっている

date  | bars | foos 
------------------------- 
2016-01-01 Null 2 
2016-01-02 9  3 
2016-01-03 8  4 
2016-01-04 7  Null 

返された値をIRED、そして日付に棒を結ぶ左、その後、日付に参加FOOSを残しました。

問題は、それは私がバーやFOOSの両方がnullの場合、日付が返されたくない私に次のような結果

date  | bars | foos 
------------------------- 
2016-01-01 Null 2 
2016-01-02 9  3 
2016-01-03 8  4 
2016-01-04 7  Null 
2016-01-05 Null Null 
2016-01-06 Null Null 
2016-01-07 Null Null 
... 

を与えることです。私はそれがそのようにレンダリングするために取得することができますが、私はそれを選択するための最も効率的な方法だか分からない、すなわち:次のように使用して

where (bars is not null or foos is not null) 
+4

でこれを試してみてください?コードの最後の行が解決策であると私には思われます。 – HoneyBadger

+0

私はこれを実行するのに最も効率的な方法かどうか尋ねようとしていますね。 – edumike

+2

試してみると、パフォーマンスに問題はありますか?通常、実際に問題が発生したときにパフォーマンスを修正するのが最善です。問題がなければ、修正する必要はありません。 – HoneyBadger

答えて

0

は、このクエリのための十分なパフォーマンスのようです。

where (bars is not null or foos is not null) 
1

だからあなたの実際の質問は何であるleft outer join

select d.dates,b.bars,f.foos from dates d 
left outer join bars b on d.dates = b.date 
left outer join foos f on d.dates = f.date; 

+------------+------+------+ 
| dates  | bars | foos | 
+------------+------+------+ 
| 2016-01-02 | 9 | 3 | 
| 2016-01-03 | 8 | 4 | 
| 2016-01-04 | 7 | NULL | 
| 2016-01-01 | NULL | 2 | 
+------------+------+------+ 
関連する問題