2017-01-06 8 views
0

SQLクエリを作成する際に問題が発生しています。SQL:左結合クエリ

表のstucture:

TABLE A: 
id  | data_a 
--------|-------- 
1  | data1 
2  | data2 
3  | data3 

TABLE B: 
    id  | data_b | a_id 
--------|--------|-------- 
    1  | data4 | 1 
    2  | data5 | 1 
    3  | data6 | 2 
    4  | data7 | 3 
    5  | data8 | 3 

TABLE C: 
    id  | data_c | b_id | x_id 
--------|--------|--------|-------- 
    1  | data9 | 1  | 1 
    2  | data10 | 2  | 1 
    3  | data11 | 3  | 1 
    4  | data12 | 1  | 2 
    5  | data13 | 4  | 2 

必要な出力:

data_a | data_b | data_c 
--------|--------|-------- 
data1 | data4 | data12 
data1 | data5 | 
data2 | data6 | 
data3 | data7 | data13 
data3 | data8 | 

現在のSQL:

SELECT data_a, data_b, data_c 
FROM a 
LEFT JOIN b ON a.id = b.a_id 
LEFT JOIN c ON b.id = c.b_id 
WHERE c.x_id = 2 OR c.x_id = null; 

SQL fiddle

+0

何をしようとしているかについての説明を追加してください。 – shmosel

+0

@shmoselは必要な出力を得ようとしています – meeeee

+0

私は一般に、SQLのfiddlesとdownvoteの質問wth表a、表b、表cを持つqustionsをupvoteします。なぜあなたは物事を困難にするためにあなたの道から出るのですか? – e4c5

答えて

5

が参加し、左の状態でX_ID = 2を入れてください。

SELECT 
    data_a, 
    data_b, 
    data_c 

FROM 
    a LEFT JOIN b ON a.id = b.a_id 
    LEFT JOIN c ON b.id = c.b_id and c.x_id=2; 
1

これを試してください: -

SELECT 
    data_a, 
    data_b, 
    data_c 

FROM 
    (Select data_a,data_b,b.id from a LEFT JOIN b ON a.id = b.a_id) as k 
    LEFT JOIN (Select * from c WHERE 
    c.x_id = 2 OR c.x_id = null) as j ON k.id = j.b_id 

完全一致のためだけにこれを追加します -

order by data_a,data_b 
+0

あなたの助けに感謝します。これは動作しますが、wonderbellの答えはネストされたselect文を必要としません – meeeee