2011-08-26 70 views
1

我有三個表:SQL:跨表的外鍵到兩個不同的表

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%' 

回答

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%' 

但看起來你已經懂了...

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

感謝您的快速回復。實際上,在你發佈這個消息之前,我已經找到了另一種方式。 – Sababado

+0

SELECT zip_code_data。*,location_data。* FROM x_data INNER JOIN zip_code_data ON x_data.zipCodeData_Id = zip_code_data.zipCodeId INNER JOIN location_data ON x_data.locationData_Id = location_data.locationDataId 其中zip_code_data.zipCode像 '23221%' – Sababado