6

共通の主キーに基づいて 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;

私は長い間一生懸命探してきましたが、私が見つけた最高のものは、左結合とユニオンオールで実装されたこの2テーブルのsqlite完全結合でした:

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;

これを変更して 2 つ以上のテーブルで機能するようにしようとしていますが、SQL は初めてで、あまりうまくいきません。妥当な時間内にこの結果を得ることができますか?

私は 3 つのテーブルの正しい実装を持っていると思います (正しくないかもしれません) が、4 に対してはまだ取得できないようです。

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;

どんな助けでも大歓迎です

4

1 に答える 1

7

2 つのテーブル間AおよびBSQLite における完全外部結合の一般的な構造は、次のとおりです。

SELECT ... FROM A LEFT JOIN B ON ...
UNION ALL
SELECT ... FROM B LEFT JOIN A ON ... WHERE A.key IS NULL

との間の完全な外部結合のビューを作成し ます。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

と についても同じことをPants行いBoxersます。

次に、これらのビューをテーブルのように扱い、同じ構造で完全外部結合を実行します。

SELECT ... FROM SocksCaps LEFT JOIN PantsBoxers ON ...
UNION ALL
SELECT ... FROM PantsBoxers LEFT JOIN SocksCaps ON ... WHERE SocksCaps.color IS NULL
于 2012-10-06T13:08:38.517 に答える