[MS SQL 2008]
私はテーブルを持っています (すべての列は文字列名です): A: いくつかのデータフィールドを所有エンティティに関連付ける 2 つの列 B: エンティティの階層を定義する 3 つの列
階層全体 (両方のテーブルに存在しないすべての行を含む) の単一のテーブルを作成する必要がありますが、テーブル A のキー列 (Acol2 として表示) は、テーブル B の列 1 または 2 のいずれかに配置できます...
A: B:
Acol1 | Acol2 Bcol1 | Bcol2 | Bcol3
-------+------ --------+-------+------
A | B B | X | Y
C | D Q | X | Y
E | F H | D | Z
G | H W | V | U
出力は
Hierarchy:
Acol1 | Bcol1 | Bcol2 | Bcol3
-------+-------+-------+------
A | B | X | Y
Null | Q | X | Y
C | Null | D | Z
G | H | D | Z
E | Null | Null | Null
Null | W | V | U
Logic (also added to original):
If A has no record in B, show A with all Null
If A has record in Bcol1, show A with full row B
If A has record in Bcol2, show A with Null, Bcol2, Bcol3
If B has no record in A, show B with Null for Acol1
私は2つの別々のJOINのあらゆる種類のUNIONを試しましたが、不要な行を取り除くことができないようです...
B LEFT JOIN A ON Acol2=Bcol1 UNION B LEFT JOIN A ON Acol2=Bcol2;
ユニオンの 2 番目の部分で Bcol1 を NULL に設定する必要があるため、重複する行が生成されます (おそらく、この重複した NULL 行を削除する方法が 1 つありますか?)B INNER JOIN A ON Acol2=Bcol1 UNION B INNER JOIN A ON Acol2=Bcol2;
明らかに、共有キーを持たない A と B からすべての行を削除します (これらの行だけを取り戻す簡単な方法の解決策は?)
どんなアイデアでも大歓迎です!
再生するには: [SQL を削除 - 返信コメントのフィドルを参照]