2016-11-23 24 views
0

私は参加する必要がある2つのテーブルがありますが、何らかの理由で期待した結果が得られません。左の結合でヌル値を見ることができませんMySQL

表1には年のすべての日付があり、表2にはいくつかの日付のデータがあります。私は、次のしている:

表1

+------------+ 
| dates | 
+------------+ 
| 2016-11-01 | 
| 2016-11-02 | 
| 2016-11-03 | 
| 2016-11-04 | 
| 2016-11-05 | 
| 2016-11-06 | 
| 2016-11-07 | 
| 2016-11-08 | 
| 2016-11-09 | 
| 2016-11-10 | 
+------------+ 

表2

+------------+--------+----+ 
| dates | status | id | 
+------------+--------+----+ 
| 2016-11-01 |  1 | 1 | 
| 2016-11-02 |  1 | 1 | 
| 2016-11-03 |  1 | 1 | 
| 2016-11-04 |  1 | 2 | 
| 2016-11-05 |  1 | 2 | 
| 2016-11-06 |  1 | 2 | 
| 2016-11-07 |  1 | 1 | 
| 2016-11-08 |  1 | 2 | 
| 2016-11-09 |  1 | 1 | 
| 2016-11-10 |  1 | 1 | 
+------------+--------+----+ 

期待される結果

+------------+--------+ 
| dates | Status | 
+------------+--------+ 
| 2016-11-01 | 1  | 
| 2016-11-02 | 1  | 
| 2016-11-03 | 1  | 
| 2016-11-04 | null | 
| 2016-11-05 | null | 
| 2016-11-06 | null | 
| 2016-11-07 | 1  | 
| 2016-11-08 | null | 
| 2016-11-09 | 1  | 
| 2016-11-10 | 1  | 
+------------+--------+ 

現在の結果:idが1で、null値をスキップどこ

select 
    a.dates, 
    b.status 
from table1 a 
left join table2 b on a.dates = b.dates 
where b.id = 1; 

残念ながら、それだけでデータを示しています

+------------+--------+ 
| dates | status | 
+------------+--------+ 
| 2016-11-01 |  1 | 
| 2016-11-02 |  1 | 
| 2016-11-03 |  1 | 
| 2016-11-07 |  1 | 
| 2016-11-09 |  1 | 
| 2016-11-10 |  1 | 
+------------+--------+ 

これは私が現在使用しているクエリです。私もnull値を参照する必要があります。私が間違ってやっていることは?

答えて

0

あなたはwhere句ので、参加条件にwhere句からb.id = 1基準を移動する必要がある唯一の結果を得るあなたのバージョンで

select 
    a.dates, 
    b.status 
from table1 a 
left join table2 b on a.dates = b.dates AND b.id = 1 
; 

参加後に全体の結果セットに適用されます。

select 
    a.dates, 
    b.status 
from table1 a 
left join table2 b on a.dates = b.dates and b.id = 1 
+0

親愛なる神にいます 右...!!!あなたはちょうど私の人生を保存した私の友人... !!!ありがとう –

0

試してください:あなたはb.id = 1

関連する問題