2014-02-06 41 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) 

您可以添加更多的自定义条件直通别名过滤和选择所需的列

相关问题