您好我有一个SQL表,它有两个表,它们在一个单独的表中引用相同的外键两次......类似于
SALES表
idSales idClient1 idClient2
1 1 2
客户表
idClient ClientName
1 Bob
2 Mick
我想将SALES表加入CLIENT表并按如下方式返回数据:
idSales idClientClientName1 idClientClientName2
1 Bob Mick
任何人都可以帮助SQL吗?我在加入时遇到了模糊的列名错误。
谢谢
答案 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
地址,我会使用h
和w
的表别名两个连接。在你的情况下,即,
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