我加入了2個表-tbl1和tbl2。左連接提供來自tbl1的所有數據,這些數據位於tbl2或僅位於tbl1。右連接提供tbl2中不存在的數據。在mysql查詢中合併左右連接
我想結合這兩個結果。
這樣做的最好方法是什麼,以便我從tbl1和tbl2獲取所有數據?
我加入了2個表-tbl1和tbl2。左連接提供來自tbl1的所有數據,這些數據位於tbl2或僅位於tbl1。右連接提供tbl2中不存在的數據。在mysql查詢中合併左右連接
我想結合這兩個結果。
這樣做的最好方法是什麼,以便我從tbl1和tbl2獲取所有數據?
的唯一可以做的就是通過使用UNION
。就像在MSSQL中一樣,MySQL不支持FULL JOIN
。
SELECT *
FROM tbl1 t1
LEFT JOIN tbl2 t2
ON t1.col = t2.col
UNION
SELECT *
FROM tbl1 t1
RIGHT JOIN tbl2 t2
ON t1.col>= t2.<col
SEE HERE: Simulating FULL JOIN in MYSQL
順便提一下,UNION
具有可選關鍵字ALL
,省略了ALL
時,UNION
自動選擇從結果DISTINCT
行。
EXAMLE:
SELECT *
FROM tableA
UNION ALL
SELECT *
FROM tableA
這可能會導致重複行
ColA ColB
==================
1 John
2 Jade
2 Jade
3 Hello
,但如果你省略字ALL
SELECT *
FROM tableA
UNION
SELECT *
FROM tableA
這可能會導致不同的行只
ColA ColB
==================
1 John
2 Jade
3 Hello
你想要的是FULL JOIN
LEFT JOIN
+RIGHT JOIN
=FULL JOIN
那麼試試這個:
SELECT * FROM tbl1
LEFT JOIN tbl2 ON tbl1.id = tbl2.id
UNION
SELECT * FROM tbl1
RIGHT JOIN tbl2 ON tbl1.id = tbl2.id
的UNION
子句兩個SQL查詢的結果組合成一個單一的所有匹配行的表。
,你必須使用FULL OUTER JOIN,但MySQL的犯規支持它。你可以用於獲取結果做到這一點:
SELECT *
FROM tbl1 t1 LEFT JOIN tbl2 t2
ON t1.<col> = t2.<col>
UNION
SELECT *
FROM tbl1 t1 RIGHT JOIN tbl2 t2
ON t1.<col>= t2.<col>
下面是可以,如果你有一個完整的加入超過2個表很容易地擴展替代:
SELECT t1*, t2.*
FROM
(SELECT col
FROM tbl1
UNION
SELECT col
FROM tbl2
) AS d
LEFT JOIN tbl1 AS t1
ON t1.col = d.col
LEFT JOIN tbl2 AS t2
ON t2.col = d.col ;