我有两张桌子: T1:
| M_ID | P_ID1 | P_ID2 | rest of T1 columns |
| 0 | 0 | 1 | ... |
| 1 | 2 | 3 | ... |
T2:
| P_ID | Type | A | B |
| 0 | 1 | a | e |
| 1 | 2 | b | f |
| 2 | 1 | c | g |
| 3 | 2 | d | h |
现在,我希望有一个选择此选项的查询:
| M_ID | P_1a | P_1b | P_2a | P_2b | rest of T1 columns |
| 0 | a | e | b | f | ... |
| 1 | c | g | c | h | ... |
所以,在单词中:我想从T1中选择所有列,但我想用T2中的列替换P_ID1,其中P_ID等于P_ID1,类型为1,P_ID2基本相同。
我显然可以通过多个查询获取所需的信息,但我想知道是否有一种方法可以通过一个查询来完成此操作。有什么想法吗?
我目前正在使用SQL Server 2008r2,但我也对其他数据库软件的解决方案感兴趣。
感谢您的帮助!
答案 0 :(得分:1)
当然,您只需要使用联接:
select T1.M_ID, t2_1.A as P_1a, t2_1.B as P_1b, t2_2.A as P_2a, t2_2.B as P_2b, ...
from T1, T2 t2_1, T2 t2_2
where T1.P_ID1 = t2_1.P_ID and T1.P_ID2 = t2_2.P_ID
基本上我们将T1连接到T2两次,一次用于P_1值,第二次用于P_2值。当你加入两次以区分两者时,你需要使用别名T2(这就是t2_1和t2_2之间的区别 - 一种区分连接T2的两个实例的方法)。
答案 1 :(得分:1)
这与仅使用现代连接语法的@John Pickup解决方案相同:
select T1.M_ID, t2_1.A as P_1a, t2_1.B as P_1b, t2_2.A as P_2a, t2_2.B as P_2b, ...
from T1
join T2 t2_1 on T1.P_ID1 = t2_1.P_ID
join T2 t2_2 on T1.P_ID2 = t2_2.P_ID
我只发布一个单独的答案,因为评论as you get told here
中没有代码格式