sql查询从一个主表和两个子表中获取名称和desc。

问题描述:

嗨,我有这样的表结构。sql查询从一个主表和两个子表中获取名称和desc。

**geoinfo** 
id 
name 
desc 

我有表

**zip_to_city** 
id, 
zip_id fk geoinfo 
city_id fk geoinfo 

比我也有

**zip_to_state** 
id 
zip_id fk geoinfo 
state_id fk geoinfo 

我想查询,以便我能够得到各拉链与相应的城市和状态。我不想要这个id,我想要这个名字。 geoinfo是包含每个geoinfo的名称和描述的主表。

什么是最好的查询来做到这一点?

+0

表格是如何相互关联的? – 2012-02-21 00:31:36

+0

没有足够的关于表格如何相关的信息。例如,什么是geoinfo? – Diego 2012-02-22 15:13:49

SELECT city_geo.geography_name as city,state_geo.geography_name as state, zip_geo.geography_name as postalCode 
FROM zip_to_city zc, zip_to_state zs, 
geoinfo city_geo, geoinfo state_geo, geoinfo zip_geo 
where zc.city_id = city_geo.id 
AND state_geo.id= zs.state_id 
AND zip_geo.id = zc.zip_id 
AND zip_geo.id = zs.zip_id 
AND zip_geo.name = ? 

这对我的作品,并得到我想要的东西。

我想,如果我理解正确的表格:

SELECT zip_to_city.city_id,zip_to_state.state_id FROM geoinfo 
INNER JOIN zip_to_city ON geoinfo.id=zip_to_city.id 
INNER JOIN zip_to_state ON geoinfo.id=zip_to_state=id where geoinfo.id='some value' 
+0

OP要求输入'name',而不是'ID' – 2012-02-21 00:33:29

+0

通过阅读问题,字段列表应该类似于'zip_geoinfo.name,city_geoinfo.name,state_geoinfo.name'(其中'zip_geoinfo'等等是三个'geoinfo'单独的'JOIN''的别名)。 – ruakh 2012-02-21 00:34:20

+0

是的,这是真的,但他没有在表中的名称,但只有ID,所以也许名称存储在geoinfo?所以:zip_to_city.geoinfo – riso 2012-02-21 00:36:32