2017-01-06 3 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

Я обычно повышаю qustions с помощью sql-скриптов и вопросов downvote wth table a, table b, table c. почему ты сбиваешься с пути, чтобы усложнить ситуацию? – 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

Смежные вопросы