简体   繁体   中英

SQL: left join query

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;

SQL fiddle

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;

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM