SQLITE:在连接期间保留所有不匹配的行
SQLITE: Keep all unmatched rows during join
我正在尝试加入多个 tables。
Table 1:
ID
TEMP
DESC
NUMB
32
89
Y
6
47
NULL
Y
5
56
43
N
4
34
54
N
3
22
78
NULL
NULL
Table 2
ID
IND
FLAV
32
Y
G
47
N
G
56
Y
R
34
Y
B
22
Y
Y
Table 3:
ID
COLOR
SHAPE
32
RED
SQUARE
47
BLUE
CIRCLE
52
NULL
TRI
22
ORANGE
NULL
我想要结果 table:
ID
TEMP
DESC
NUMB
IND
FLAV
COLOR
SHAPE
32
89
Y
6
Y
G
RED
SQUARE
47
NULL
Y
5
N
G
BLUE
CIRCLE
56
43
N
4
Y
R
NULL
NULL
34
54
N
3
Y
B
NULL
NULL
22
78
NULL
NULL
Y
Y
ORANGE
NULL
52
NULL
NULL
NULL
NULL
NULL
NULL
TRI
生成的 ID 的行顺序对我来说无关紧要。
我试过:
SELECT *
FROM Table1
INNER JOIN Table2 USING(ID)
LEFT JOIN Table3 USING(ID)
但它遗漏了 ID 52。我想确保没有遗漏任何来自 table 的不匹配 ID。
这在 SQLITE 中可行吗?
对于此要求,正确的连接类型是 FULL OUTER JOIN
SQLite 不支持。
解决方法是使用一个子查询,该子查询 returns 所有 3 个表的不同 ID,然后 LEFT
使用 USING
子句连接到表:
SELECT *
FROM (SELECT ID FROM Table1 UNION SELECT ID FROM Table2 UNION SELECT ID FROM Table3) t
LEFT JOIN Table1 USING (id)
LEFT JOIN Table2 USING (id)
LEFT JOIN Table3 USING (id);
参见demo。
我正在尝试加入多个 tables。
Table 1:
ID | TEMP | DESC | NUMB |
---|---|---|---|
32 | 89 | Y | 6 |
47 | NULL | Y | 5 |
56 | 43 | N | 4 |
34 | 54 | N | 3 |
22 | 78 | NULL | NULL |
Table 2
ID | IND | FLAV |
---|---|---|
32 | Y | G |
47 | N | G |
56 | Y | R |
34 | Y | B |
22 | Y | Y |
Table 3:
ID | COLOR | SHAPE |
---|---|---|
32 | RED | SQUARE |
47 | BLUE | CIRCLE |
52 | NULL | TRI |
22 | ORANGE | NULL |
我想要结果 table:
ID | TEMP | DESC | NUMB | IND | FLAV | COLOR | SHAPE |
---|---|---|---|---|---|---|---|
32 | 89 | Y | 6 | Y | G | RED | SQUARE |
47 | NULL | Y | 5 | N | G | BLUE | CIRCLE |
56 | 43 | N | 4 | Y | R | NULL | NULL |
34 | 54 | N | 3 | Y | B | NULL | NULL |
22 | 78 | NULL | NULL | Y | Y | ORANGE | NULL |
52 | NULL | NULL | NULL | NULL | NULL | NULL | TRI |
生成的 ID 的行顺序对我来说无关紧要。 我试过:
SELECT *
FROM Table1
INNER JOIN Table2 USING(ID)
LEFT JOIN Table3 USING(ID)
但它遗漏了 ID 52。我想确保没有遗漏任何来自 table 的不匹配 ID。
这在 SQLITE 中可行吗?
对于此要求,正确的连接类型是 FULL OUTER JOIN
SQLite 不支持。
解决方法是使用一个子查询,该子查询 returns 所有 3 个表的不同 ID,然后 LEFT
使用 USING
子句连接到表:
SELECT *
FROM (SELECT ID FROM Table1 UNION SELECT ID FROM Table2 UNION SELECT ID FROM Table3) t
LEFT JOIN Table1 USING (id)
LEFT JOIN Table2 USING (id)
LEFT JOIN Table3 USING (id);
参见demo。