[微软 SQL 2008]
我有表(所有列都是字符串名称): A:将某些数据字段与拥有实体相关联的两列 B:定义实体层次结构的三列
我需要创建整个层次结构的单个表(包括两个表中都不存在的所有行),但是表 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
我已经尝试了两个单独的 JOIN 的各种 UNION,但似乎无法摆脱无关的行......
B LEFT JOIN A ON Acol2=Bcol1 UNION B LEFT JOIN A ON Acol2=Bcol2;
给出重复的行,因为联合的第二部分必须将 Bcol1 设置为 NULL(也许一种解决方案是删除这个重复的 NULL 行?)B INNER JOIN A ON Acol2=Bcol1 UNION B INNER JOIN A ON Acol2=Bcol2;
显然从 A 和 B 中删除了所有没有共享键的行(关于重新获得这些行的简单方法的解决方案?)
任何想法表示赞赏!
玩:[删除 SQL - 请参阅回复评论中的小提琴]