Reputation: 2939
I am having problems forming an sql query.
Table 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
Required output:
data_a | data_b | data_c
--------|--------|--------
data1 | data4 | data12
data1 | data5 |
data2 | data6 |
data3 | data7 | data13
data3 | data8 |
Current 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;
Upvotes: 0
Views: 41
Reputation: 1126
Put the x_id = 2 in left join condition.
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;
Upvotes: 5
Reputation: 431
Try this : -
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
for exact match just add this :-
order by data_a,data_b
Upvotes: 1