有段SQL不清楚应该怎么写,希望各位指点,表数据如下所示
表A
ID | DEPTH | C1 |
---|---|---|
1 | 3100 | 哈哈 |
2 | 3300 | 嘿嘿 |
表B
ID | DEPTH | C2 |
---|---|---|
1 | 3200 | 咯咯 |
2 | 3300 | 吼吼 |
ID为主键,在SQL中没啥作用,DEPTH代表深度,主要是根据深度来查看两张表的数据,后面的C1和C2分别代表当前深度的数据
例如DEPT为3100时:C1为哈哈,C2没有值
例如DEPT为3300时:C1为嘿嘿,C2为吼吼
DEPTH | C1 | C2 |
---|---|---|
3100 | 哈哈 | |
3200 | 咯咯 | |
3300 | 嘿嘿 | 吼吼 |
SELECT
s.DEPTH,
A.C1,
B.C2
FROM
( SELECT DEPTH FROM A UNION ALL SELECT DEPTH FROM B ) s
LEFT JOIN A ON A.DEPTH = s.DEPTH
LEFT JOIN B ON B.DEPTH = s.DEPTH
GROUP BY
s.DEPTH
SELECT a.depth,a.c1,b.c2 FROM a LEFT JOIN b ON a.depth=b.depth
UNION
SELECT b.depth,a.c1,b.c2 FROM a RIGHT JOIN b ON a.depth=b.depth
SELECT
COALESCE(t1.depth, t2.depth) AS depth
,t1.c1
,t2.c2
FROM
(
SELECT
depth
,c1
FROM 表A
) t1
FULL OUTER JOIN
(
SELECT
depth
,c2
FROM 表B
) t2
ON t1.depth = t2.depth
;
一个A为主表的左连接,一个B为主表的左连接,再Union起来
其实就是:A的独有+B的独有+AB的公有
SELECT e.depth,e.c1,d.c2 from a e LEFT JOIN b d ON e.depth=d.depth
UNION
SELECT d.depth,e.c1,d.c2 FROM a e RIGHT JOIN b d ON e.depth=d.depth
order by depth