SQL: кросс-таблица с внешними ключами для двух разных таблиц - PullRequest
1 голос
/ 26 августа 2011

У меня есть три таблицы:

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 ]

2 голосов
/ 26 августа 2011

Вы можете создать встроенное представление:

 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 голосов
/ 26 августа 2011

Я собирался написать:

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

но похоже, что вы уже получили ...

...