如果我有两张桌子
CREATE TABLE R
(
a int,
b int
);
CREATE TABLE S
(
b int,
c int,
d int
);
INSERT INTO R
VALUES (3,1),(2,3),(2,0),(3,3),(1,1);
INSERT INTO S
VALUES (2,2,3),(3,0,0),(1,3,3),(2,2,0);
然后我做R outer join S
。我试图弄清楚结果。如果我尝试使用 sql 代码,我会这样做:
SELECT r.a,r.b,s.c,s.d
FROM R r
LEFT JOIN S s ON r.b=s.b
UNION
SELECT r.a,r.b,s.c,s.d
FROM R r
RIGHT JOIN S s ON r.b=s.b
该查询的结果是:
A B C D
3 1 3 3
2 3 0 0
2 0 - -
3 3 0 0
1 1 3 3
- - 2 3
- - 2 0
如果我尝试手动解决它:
比赛3 1
与1 3 3
比赛2 3
与3 0 0
比赛2 0
与- - -
比赛3 3
与3 0 0
比赛1 1
与1 3 3
这使得上面的前 5 行成为该结果。剩下的两行来自右连接。但我不明白的是为什么正确的连接会产生
- - 2 3
- - 2 0
因为在左边加入2 0
不匹配任何东西,但b
列被保留并且 0 在那里。
但是在右连接中,2 2 3
and2 2 0
与任何内容都不匹配,但 b 列变成了空值。不应该像左连接一样保留 b 列吗?
谁能解释这里发生了什么?
谢谢。