我正在连接两个表-tbl 1和tbl 2。左连接给予了tbl 1中位于tbl 2中或仅位于tbl 1上的所有数据。右连接提供了tbl 2中不存在于tbl 1中的数据。我想把两个结果结合起来。要从tbl 1和tbl 2获取所有数据,最好的方法是什么?
c2e8gylq1#
你唯一能做的就是使用UNION。MySQL不像MSSQL那样支持FULL JOIN。
UNION
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
顺便说一下,UNION有可选关键字ALL,当ALL被省略时,UNION自动从结果集中选择DISTINCT行。检查:
ALL
DISTINCT
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
6tr1vspr2#
你想要的是FULL JOINLEFT JOIN + RIGHT JOIN = FULL JOIN所以试试这个:
LEFT JOIN
RIGHT 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查询的结果组合到一个包含所有匹配行的表中。
fnx2tebb3#
下面是一个替代方法,如果您有超过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 ;
0vvn1miw4#
你必须使用完全外部连接,但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>
4条答案
按热度按时间c2e8gylq1#
你唯一能做的就是使用
UNION
。MySQL不像MSSQL那样支持FULL JOIN
。顺便说一下,
UNION
有可选关键字ALL
,当ALL
被省略时,UNION
自动从结果集中选择DISTINCT
行。检查:
这可能导致重复行
但是如果你省略了单词
ALL
这只能产生不重复的行
6tr1vspr2#
你想要的是
FULL JOIN
LEFT JOIN
+RIGHT JOIN
=FULL JOIN
所以试试这个:
UNION
子句将两个SQL查询的结果组合到一个包含所有匹配行的表中。fnx2tebb3#
下面是一个替代方法,如果您有超过2个表的完全联接,则可以轻松扩展:
0vvn1miw4#
你必须使用完全外部连接,但mysql不支持它..你可以这样做得到的结果: