繁体   English   中英

SQL:左联接查询

[英]SQL: left join query

我在形成sql查询时遇到问题。

表结构:

 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小提琴

将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;

尝试这个 : -

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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