完全外部加入4个表的sqlite

atf*_*gus 5 sqlite full-outer-join

我需要基于一个公共主键加入4个表.如果sqlite实现了完全外连接,它可能看起来像这样(没有考虑优化).

SELECT S.pair, C.ball, P.bluejeans, B.checkered 
FROM Socks S 
FULL OUTER JOIN Caps C 
FULL OUTER JOIN Pants P 
FULL OUTER JOIN Boxers B 
WHERE S.color = C.color AND S.color = P.color AND S.color = B.color;
Run Code Online (Sandbox Code Playgroud)

我看起来很长很难,我找到的最好的是这个2表sqlite完全连接实现了左连接和联合alls:

SELECT employee.*, department.* 
FROM employee LEFT JOIN department 
ON employee.DepartmentID = department.DepartmentID 
UNION ALL SELECT employee.*, department.* 
FROM   department LEFT JOIN employee 
ON employee.DepartmentID = department.DepartmentID 
WHERE  employee.DepartmentID IS NULL;
Run Code Online (Sandbox Code Playgroud)

我正在尝试修改它以适用于超过2个表,但我是SQL新手,我不会太过分.是否有可能在合理的时间内得到这个结果?

我认为我有一个正确的3个表的实现(它可能不正确)但我似乎仍然无法得到它4.这是我有3个:

SELECT S.pair, C.ball, P.bluejeans 
FROM Socks S LEFT JOIN Caps C LEFT JOIN Pants P 
ON C.color = S.color AND P.color = S.color 
UNION ALL 
SELECT S.pair, C.ball, P.bluejeans 
FROM Socks S LEFT JOIN Caps C LEFT JOIN Pants P 
ON S.color = C.color AND S.color = P.color 
WHERE S.color IS NULL;
Run Code Online (Sandbox Code Playgroud)

任何帮助深表感谢

CL.*_*CL. 6

两个表之间ABSQLite 中完全外连接的一般构造确实是:

SELECT ... FROM A LEFT JOIN B ON ...
UNION ALL
SELECT ... FROM B LEFT JOIN A ON ... WHERE A.key IS NULL
Run Code Online (Sandbox Code Playgroud)

现在为和之间的完整外连接创建一个视图SocksCapsSocksCaps

CREATE VIEW SocksCaps AS
SELECT ... FROM Socks LEFT JOIN Caps ON ...
UNION ALL
SELECT ... FROM Caps LEFT JOIN Socks ON ... WHERE Socks.color IS NULL
Run Code Online (Sandbox Code Playgroud)

Pants和做同样的事情Boxers

然后像对待表格一样对待这些视图,并使用相同的结构进行完整的外连接:

SELECT ... FROM SocksCaps LEFT JOIN PantsBoxers ON ...
UNION ALL
SELECT ... FROM PantsBoxers LEFT JOIN SocksCaps ON ... WHERE SocksCaps.color IS NULL
Run Code Online (Sandbox Code Playgroud)