结合左右加入mysql查询

Obh*_*aso 9 mysql join left-join

我正在加入2个表-tbl1和tbl2.左连接提供来自tbl1的所有数据,该数据在tbl2中或仅在tbl1上.右连接提供来自tbl2的数据,这在tbl1中不存在.

我想结合两个结果.

这样做的最佳方法是什么,以便从tbl1和tbl2获取所有数据?

Joh*_*Woo 13

唯一可以做到的就是使用UNION.MySQL FULL JOIN不像MSSQL 那样支持.

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
Run Code Online (Sandbox Code Playgroud)

请看这里:在MYSQL中模拟完全加入

顺便说一句,UNION有可选关键字ALL,当ALL省略时,UNION自动DISTINCT从结果集中选择行.

EXAMLE:

SELECT *
FROM   tableA
UNION ALL
SELECT *
FROM   tableA
Run Code Online (Sandbox Code Playgroud)

这可能导致重复行

ColA    ColB
==================
1       John
2       Jade
2       Jade
3       Hello
Run Code Online (Sandbox Code Playgroud)

但如果省略这个词 ALL

SELECT *
FROM   tableA
UNION
SELECT *
FROM   tableA
Run Code Online (Sandbox Code Playgroud)

这可能会导致不同的行

ColA    ColB
==================
1       John
2       Jade
3       Hello
Run Code Online (Sandbox Code Playgroud)


him*_*056 6

你想要的是什么 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
Run Code Online (Sandbox Code Playgroud)

UNION子句将两个SQL查询的结果组合到一个包含所有匹配行的表中.