我想从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
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top