SQL查询连接多个列

时间:2009-05-18 15:42:49

标签: sql syntax join union

我正在尝试从2个表中加入一些数据,但是在几个列上。这是一个例子:

  

来源

     

ID |说明| AAAA | BBBB |

     

表2

     

ID |文| ID1 | ID2 | ID3 |

Table2 中的ID1,ID2和ID3是来源表中的ID

我想做一个产生结果的查询:

Table2.Text,
Source.Desc(ID1),
Source.AAAA(ID1),
Source.Desc(ID2),
Source.AAAA(ID2),
Source.Desc(ID3),
Source.AAAA(ID3)

我猜这会是一个联接,但是我无法正确理解语法...或者我会更好地与联盟合作?

4 个答案:

答案 0 :(得分:6)

你可以使用多个连接,不是吗?例如:

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

答案 1 :(得分:4)

您需要连接三次源表,每个ID一个。你也可以尝试一个联系,看看哪个表现更好。

这是一个糟糕的表设计(它应该规范化),我建议你现在就改变它,如果可能的话。 shoudl bea相关表与每个id在一个单独的记录中,然后你可以加入一次,它会更有效,更容易编写代码,你不必在你需要的那天改变表结构和所有查询ID4。

答案 2 :(得分:1)

三个联接应该可以做到这一点:

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

答案 3 :(得分:1)

如果不是所有的源表都填充在Table2中,这仍然会给你部分结果:

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