【发布时间】:2010-09-02 16:49:08
【问题描述】:
如何加入下表
TableA TableB TableC TableD
ID ID_C ID ID_A Value ID ID ID_C Value
1 1 1 1 a 1 1 1 a
2 1 b 2 1 b
为了得到像这样的结果
Result
ID ID_B Value ID_C ID_D Value
1 1 a 1 1 a
1 2 b 1 2 b
我的结果不应该包含 1 2 b 1 1 b 并且两个值列不能总是具有相同的值,因此它不能在条件中使用。
为了更简单,
Resultant Table TableA TableB
ID Value ID Value ID ID_A
1 a 1 a 1 1
1 b 2 g 2 1
2 a 3 d 3 2
3 c 4 3
现在我需要将结果表与 TableA、TableB 连接起来,以便从 TableA、TableB 和 ResultantTable.ID=TableA.ID 和 TableB.ID_A=TableA.ID 中获取一些列,因为它是一个外键。
使用 TableB 进行连接会导致重复。由于 ID=1 出现两次,当只有 2 条记录时,我得到 4 条 ID=1 的记录。它可以通过 distinct 或 group by 来完成,但我还需要显示其他列。在此过程中我该如何做。
【问题讨论】:
-
@kurozakura -“结果不应包含 1 2 b 1 1 b”。它应该包含 1 2 b 1 1 a 吗?如果没有,为什么不呢?
-
好吧,这就是表格的样子,值 a 和 b 就像不同的状态,我需要检索这两个状态,因此从表 c -> 表 d 映射,因为表 b 和表 D 它最终导致不正确的映射,因为每条记录可以有多个状态,即 a , b 。
-
啊,所以TableB应该通过Value链接到TableD。
-
@kurozakura,在“简化”场景中,您无法从 TableA 和 TableB 中获取结果表。结果值 b 和 c 不存在于 TableA 或 TableB 中,而 TableA 值 g 和 d 不存在于预期结果中。
标签: sql sql-server tsql sql-server-2008 join