题
我想从2个表加入了一些数据一起,但在几个列。这里是一个例子:
<强>来源表
ID |说明| AAAA | BBBB |
<强>表2 强>表
ID |文| ID1 | ID2 | ID3 |
其中ID1,ID2和ID3中的表2 强>是ID的从在来源表
我想要做这产生的结果的查询:
Table2.Text,
Source.Desc(ID1),
Source.AAAA(ID1),
Source.Desc(ID2),
Source.AAAA(ID2),
Source.Desc(ID3),
Source.AAAA(ID3)
我猜这将是一个连接,但我不能得到正确的语法......或者我会是一个联盟?
更好解决方案
如果不是所有的源表在表2填充,这仍然会给你的部分结果:
SELECT
t.Desc, s1.Desc, s1.AAAAA, s2.Desc, s2.AAAAA, s3.Desc, s3.AAAA
FROM Table2 t
LEFT OUTER JOIN Source s1 ON t.ID1 = s1.ID
LEFT OUTER JOIN Source s2 ON t.ID2 = s2.ID
LEFT OUTER JOIN Source s3 ON t.ID3 = s2.ID
WHERE t.ID=@YourIDHere
其他提示
您可以只使用多个连接,你能不能?例如:
SELECT tb.Desc, s1.Desc, s1.AAAAA, s2.Desc, s2.AAAAA, s3.Desc, s3.AAAA
FROM Table2 tb
INNER JOIN Source s1 ON tb.ID1 = s1.ID
INNER JOIN Source s2 ON tb.ID2 = s2.ID
INNER JOIN Source s3 ON tb.ID3 = s2.ID
您需要加入到源表三次,一个用于每个ID。你也可以尝试unuion,看看哪个效果更好。
这是一个坏表设计(应该是标准化的),我建议你现在如果在所有可能更改。有shoudl BEA在单独记录每个ID相关的表,那么你可以参加一次,这将是更有效,更容易编写针对代码,你就不必改变表结构和allthe查询您所需要的天ID4。
三加入应该做的伎俩:
select A.*, coalesce(B1.Text,B2.Text,B3.Text,'') as Text
from Source A
inner join Table2 B1 on B1.ID1=A.ID
inner join Table2 B2 on B2.ID2=A.ID
inner join Table2 B3 on B3.ID3=A.ID
不隶属于 StackOverflow