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