使用内部联接从多个表进行SQL查询
我有一个名为INVOICE的表,从中可以获得ADDRESSID使用内部联接从多个表进行SQL查询,sql,sql-server,Sql,Sql Server,我有一个名为INVOICE的表,从中可以获得ADDRESSID ID CODE VALUE 1 BB BlindFold 2 BC Bucharest 我有另一个名为Address的表 ADDRESSID ADDRESS 2 BB 2 BC CC和BC的值位于另一个基于ADDRESSID的名为ADDRESSVALUE的表中 ID CODE
ID CODE VALUE
1 BB BlindFold
2 BC Bucharest
我有另一个名为Address的表
ADDRESSID ADDRESS
2 BB
2 BC
CC和BC的值位于另一个基于ADDRESSID的名为ADDRESSVALUE的表中
ID CODE VALUE
1 BB BlindFold
2 BC Bucharest
现在我使用内部联接作为查询表
SELECT AC.VALUE AS ADDRESS
FROM ADDRESS AS OT
INNER JOIN INVOICE AS OM ON OM.ADDRESSID = OT.ADDRESSID
INNER JOIN ADDRESSVALUE AS AC ON OT.ADDRESS = AC.CODE
WHERE OM.ADDRESSID = 2
我得到的结果是
Blindfold
Blindfold
但应该是这样
BlindFold
Bucharest
直接使用而不加入
SELECT OM.VALUE AS ADDRESS
FROM INVOICE AS OM WHERE OM.ADDRESSID = @AddressID
--
(更新)获得您想要的结果的一种方法:
SELECT AC.VALUE AS ADDRESS
FROM ADDRESS AS OT
INNER JOIN INVOICE AS OM ON OM.ADDRESSID = OT.ADDRESSID
INNER JOIN ADDRESSVALUE AS AC ON OT.ADDRESS = AC.CODE
WHERE OM.ADDRESSID = @AddressID
SQLFiddle。如果Address和Addressvalue表应该通过两个表中存在的列ADDRESSID连接,那么select语句应该包括如下内容
ADDRESS.ADDRESSID = ADDRESSVALUE.ADDRESSID
试试这个
SELECT C.VALUE AS ADDRESS
FROM ADDRESS A
INNER JOIN INVOICE B ON A.ADDRESSID=B.ADDRESSID
INNER JOIN ADDRESSVALUE C ON A.ADDRESSID=C.ADDRESSID
AND A.ADDRESS=C.CODE
WHERE B.ADDRESSID=2
例如,你可以看到我认为根本不应该有任何结果。当您使用ADDRESSVALUE连接ADDRESS时,没有匹配项--BB不匹配Blindfold。抱歉,它现在已编辑。您使用的是两个不同的别名,但只有一个表。发票表中没有值列。你漏掉了WHERE关键字。它让我蒙了两次眼睛。你确定吗?!再次检查,并检查您部分中的相关查询。已编辑问题,请立即帮助。