2013-07-30 46 views
2

我從哪裏獲得ADDRESSID一個名爲發票表SQL查詢從多個表使用INNER JOIN

我還有一個名爲地址表作爲

ADDRESSID   ADDRESS 
2     BB 
2     BC 

和CC和BC的值是另一個表基於ADDRESSID

ID  CODE VALUE 
1  BB  BlindFold 
2  BC  Bucharest 

現在我使用內部查詢表命名ADDRESSVALUE加入成爲

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 
+6

我不認爲應該有任何結果。當您使用ADDRESSVALUE加入ADDRESS時,沒有匹配--BB與Blindfold不匹配。 – Barmar

+0

對不起,現在編輯。 – user2486130

回答

0

照片直接使用,而不加入!

SELECT OM.VALUE AS ADDRESS 
FROM INVOICE AS OM WHERE OM.ADDRESSID = @AddressID 

-

SELECT value FROM second_table WHERE code IN 
(SELECT address FROM first_table WHERE addressid = @AddressID); 
+0

您正在使用兩個不同的別名,但只有一個表。 INVOICE表中沒有VALUE列。而你錯過了WHERE關鍵字。 – Barmar

+0

是的..錯過了它..感謝@Barmar – ajmalmhd04

+0

我編輯了這個問題。現在它正確 – user2486130

1

(更新)一個辦法讓你正在尋找的結果:

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 here

+0

編輯該問題,請立即幫助。 – user2486130

+0

@ user2486130:請參閱最新的答案。 –

0

如果地址和Addressvalue表應該是通過它存在兩個表中的列ADDRESSID聯合,那麼你的select語句應該包括像

ADDRESS.ADDRESSID = ADDRESSVALUE.ADDRESSID 
0

試試這個

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 

對於示例,你可以看到SQLFiddle