题
假设我们有一个表A:
itemid mark
1 5
2 3
和表B:
itemid mark
1 3
3 5
我想在 A.itemid=B.itemid 上左右加入 A*B 。IE。结果:
itemid A.mark B.mark
1 5 3
2 3 NULL
3 NULL 5
有没有一种方法可以在 MySQL 的一个查询中完成它?
解决方案
它被称为完全外连接,从它的特性来看,MySQL 本身并不支持它。 文档. 。您可以使用 UNION 来解决此限制,如我链接到的页面的评论中所述。
[编辑] 既然其他人发布了片段,就在这里。您可以在链接页面上查看说明。
SELECT *
FROM A LEFT JOIN B ON A.id = B.id
UNION ALL
SELECT *
FROM A RIGHT JOIN B ON A.id = B.id
WHERE A.id IS NULL
其他提示
可以做一些工作,但这里有一些 sql
select distinct T.itemid, A.mark as "A.mark", B.mark as "B.mark"
from (select * from A union select * from B) T
left join A on T.itemid = A.itemid
left join B on T.itemid = B.itemid;
这依赖于左连接,它返回原始表中的所有行(在本例中是子选择表 T)。如果连接表中没有匹配项,则它将将该列设置为 NULL。
这对我在 SQL Server 上有效:
select isnull(a.id, b.id), a.mark, b.mark
from a
full outer join b on b.id = a.id
不隶属于 StackOverflow