SQL:使用外键到两个不同表的交叉表

时间:2011-08-26 13:54:58

标签: android sql orm foreign-key-relationship

我有三张桌子:

zip_code_data
|zipCodeId| primary key
|zipCode| indexed
|other columns...|

location_data
|locationDataId| primary key
|city| indexed
|other columns...|

x_data
|id| primary key
|zipCodeId| foreign key
|locationDataId| foreign key

我的目标是对邮政编码或城市运行查询,并从 zip_code_data location_data 表中获取与之关联的所有数据
例如,如果用户搜索邮政编码,我想从两个表中撤回与该邮政编码相关的所有数据。

我的第一个猜测是首先从交叉表中获取外键( x_data ,下面的示例),然后使用它们从每个表中获取数据......因为我是有点像新手用户我不知道最好的方法。

SELECT x_data.zipCodeId, x_data.locationDataId
FROM x_data
INNER JOIN zip_code_data
ON x_data.zipCodeId=zip_code_data.zipCodeId
WHERE zip_code_data.zipCode LIKE '2322%'

2 个答案:

答案 0 :(得分:2)

您可以创建内嵌视图:

 select zips.othercolumn, LOCS.city
      from zips
           inner join x_data on zips.zip = x_data_zip and zips.zip like .....

           left join (
                select id, locations.city from locations
                where locations.id = x_data.locationid
           ) as LOCS

或只是加入位置表:

           left join locations as locs on locs.locationid = x_data.locationid

答案 1 :(得分:0)

我即将张贴:

SELECT zip.*,loc.*
FROM x_data xref
JOIN zip_code_data zip ON zip.zipCodeId=xref.zipCodeID
JOIN location_Data loc ON loc.locationDataID=xRef.locationDataID
WHERE zip.zipCode LIKE '2322%' or loc.city LIKE '%aaa%'

但看起来你已经知道了......