8

假设我们有一张表 A:

itemid mark
1      5
2      3

和表 B:

itemid mark
1      3
3      5

我想在 A.itemid=B.itemid 左右加入 A*B。即结果:

itemid A.mark B.mark
1      5      3
2      3      NULL
3      NULL   5

有没有办法在 MySQL 的一个查询中做到这一点?

4

3 回答 3

8

它被称为完全外连接,从它的docs来看,它在 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
于 2008-08-13T10:15:39.293 回答
2

可以做一些工作,但这里有一些 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。

于 2008-08-13T09:56:46.787 回答
-1

这适用于我在 SQL Server 上:

select isnull(a.id, b.id), a.mark, b.mark
from a 
full outer join b on b.id = a.id
于 2008-08-13T09:58:23.133 回答