2014-02-06 127 views
0

我使用的innodb是id_name-> name.id和id_street-> street.id的外鍵,我想從名稱表中獲取名稱&,具體取決於街道&從街道表使用關係表的郵件,但我不知道我應該使用的SQL查詢。另一個查詢中的SQL結果查詢

Name      Street     Relationship 
___________ _______  ______________ ____  __________________________ 
|id |name | number|  |id | street |zip |  |id | id_name | id_street |  
|____|_____|_______|  |____|________|____|  |___|_____________________| 
|1 | aaa | 11111 |  |1 | s1  |600 |  |1 | 1  | 1  |     
|2 | bbb | 11112 |  |2 | s2  |600 |  |2 | 1  | 2  | 
|3 | ccc | 11113 |  |3 | s3  |600 |  |3 | 2  | 3  | 

我應該使用多個查詢:

- 1)get the id of the street/zip (ex: s2 and 600 return=2) 
- 2)get the id of the name (1) from the returned id (2) 
- 3) select name/number field from name id (1) 

或有可能合併所有查詢。

回答

2

使用此查詢:

SELECT name.name, name.number FROM name 
    JOIN relationship AS r ON name .id = r.id_name 
    JOIN street ON street.id = r.id_street 
    WHERE street.street = "yourStreet" AND street.zip="1111"; 
+0

的只有我的信息是郵編和街道 – Namas

+0

這是您必須在該查詢中輸入的唯一信息。其他一切都保持不變,與街道和郵編無關。 – maja

+1

建設性的批評......你應該習慣於爲你的查詢使用tableOrAlias.ColumnName來防止列起源的不明確性。如果相同名稱的鍵位於公用表格中,也可能會出現問題。你會得到意想不到的結果。 – DRapp

0

可以通過應用多達到的結果加入

SELECT 
     N.name,n.number 
FROM 
     Name N, 
     Street S, 
     Relationship R 
WHERE 
     N.id = R.id_name 
AND 
     S.id = R.id_street 
AND 
     R.id_street = 2 (Displays data only Street ID 2) 

您可以添加更多的自定義條件直通別名過濾和選擇所需的列

相關問題