SQL在连接时获取多个值

时间:2013-05-20 13:42:02

标签: sql

您好我有一个SQL表,它有两个表,它们在一个单独的表中引用相同的外键两次......类似于

SALES表

idSales idClient1 idClient2
1       1         2

客户表

idClient ClientName
1        Bob
2        Mick

我想将SALES表加入CLIENT表并按如下方式返回数据:

idSales idClientClientName1 idClientClientName2
1       Bob                 Mick

任何人都可以帮助SQL吗?我在加入时遇到了模糊的列名错误。

谢谢

3 个答案:

答案 0 :(得分:8)

您需要在表Client上基本连接表Sales两次,因为表Sales上有两列依赖于表Client

SELECT  a.idSales,
        b.ClientName ClientName1,
        c.ClientName ClientName2
FROM    Sales a
        INNER JOIN Client b
            ON a.idClient1 = b.idClient
        INNER JOIN Client c
            ON a.idClient2 = c.idClient

要进一步了解联接,请访问以下链接:

但是当其中一列或两列都可以为空时时,INNER JOIN将不会向您提供Sales的所有记录,因为它只会选择至少一个匹配的位置在另一张桌子上。而是使用LEFT JOIN

答案 1 :(得分:1)

我可以补充一点,在这种情况下,我使用表别名来暗示你在连接表中链接的实体。例如,如果外键是地址表,并且您有work地址和Home地址,我会使用hw的表别名两个连接。在你的情况下,即,

Selext s.idSales,
    c1.ClientName ClientName1,
    c2.ClientName ClientName2
From Sales s
    Join Client c1
        On c1.idClient = s.idClient1
    Join Client c2
        On c2.idClient = s.idClient2

答案 2 :(得分:0)

对于那些将来可能会看到这个问题的初学SQL人员来说,添加AS单词会更有帮助,它会更清晰:

SELECT
Sale.idSales,
c1.ClientName AS ClientName1,
c2.ClientName AS ClientName2
FROM
Sales AS Sale
INNER JOIN Client AS c1 ON Sale.idClient1 = c1.idClient
INNER JOIN Client AS c2 ON Sale.idClient2 = c2.idClient