2015-01-04 2 views
0

У меня есть 3 таблицы, и я хочу знать, как я могу выполнить тройное соединение с этим типом настройки, если вообще?Inner Join 3 tables

First Table: LOCATIONS_TABLE 
locationID 
websiteID 
locationCity 
locationState 
locationCountry 
locationURL 

Second Table: PREF_TABLE 
pref_ID 
Pref_LocationID 
Pref_WebsiteID 
Pref_SavedTitle 

Third Table: WEBSITECATEGORY_TABLE 
wbcatID 
websiteID 
WBLinkCategoryParentID 
WBLinkTitle 
WBLinkURL 

2-й таблица, где пользователь имеет магазин предпочтение с Pref_SavedTitle для их местоположений они сохраняются для последующего использования.

текущий оператор SQL у меня есть, который только делает двойной внутреннее соединение является ...

SELECT 
LOCATIONS_TABLE.LocationWebsiteID, 
LOCATIONS_TABLE.locationCity, 
LOCATIONS_TABLE.locationState, 
LOCATIONS_TABLE.locationCountry, 
LOCATIONS_TABLE.locationURL, 
PREF_TABLE.Pref_SavedTitle 
FROM PREF_TABLE INNER JOIN LOCATIONS_TABLE 
ON PREF_TABLE.Pref_LocationID = LOCATIONS_TABLE.LocationID 
WHERE PREF_TABLE.Pref_SavedTitle = 'AlabamaPREF' 

Это возвращает данные выборки ...

LocationWebsiteID = 2 
locationCity = Mobile 
locationState = Alabama 
locationCountry = United States 
locationURL = alabama.bmv.org 
Pref_SavedTitle - AlabamaPREF 

3-таблица содержит данные выборки ...

wbcatID = 1 
websiteID = 2 
WBLinkCategoryParentID = 0 
WBLinkTitle = Alabama Resources 
WBLinkURL = /alabama-resources 

Это делает именно то, что необходимо для выполнения, которое возвращает мне все LOCATION_TAB LE, которые равны идентификатору LocationID, который ранее был сохранен в PREF_TABLE.

Однако у меня есть 3-я таблица, которую мне нужно добавить к этому уравнению (которое является третьей таблицей), перечисленным выше. Мне нужно иметь возможность связать Третью таблицу с идентификатором веб-сайта так, чтобы он знал, что WBLinkTitle и WBLinkURL связаны с этим конкретным сайтом.

На конечном выходе ... Мне нужно уметь отображать результаты для колонны ...

LOCATIONS_TABLE.websiteID, 
LOCATIONS_TABLE.locationURL, 
WEBSITECATEGORY_TABLE.WBLinkTitle, 
WEBSITECATEGORY_TABLE.WBLinkURL 

, которые основаны от моих данных выборки будет ...

websiteID = 2 
locationURL = alabama.dmv.org 
WBLinkTitle = Alabama Resources 
WBLinkURL = /alabama-resources 

SQLFIDDLE EXAMPLE

ответ

5

ОБНОВЛЕНО v-1

Я обновил ответ в соответствии с вашим комментарием (теперь третья таблица внутрипартийной присоединился к PREF_TABLE и дополнительное условие было добавлено к первому присоединиться: AND PREF_TABLE.Pref_WebsiteID = LOCATIONS_TABLE.LocationWebsiteID предотвратить все-места погрузки):

SELECT 
    LOCATIONS_TABLE.LocationWebsiteID, 
    LOCATIONS_TABLE.locationCity, 
    LOCATIONS_TABLE.locationState, 
    LOCATIONS_TABLE.locationCountry, 
    LOCATIONS_TABLE.locationURL, 
    PREF_TABLE.Pref_SavedTitle, 
    WEBSITECATEGORY_TABLE.WBLinkTitle, 
    WEBSITECATEGORY_TABLE.WBLinkURL 
FROM 
    PREF_TABLE 
    INNER JOIN LOCATIONS_TABLE 
     ON PREF_TABLE.Pref_LocationID = LOCATIONS_TABLE.LocationID 
      AND PREF_TABLE.Pref_WebsiteID = LOCATIONS_TABLE.LocationWebsiteID 
    INNER JOIN WEBSITECATEGORY_TABLE 
     ON WEBSITECATEGORY_TABLE.websiteID = PREF_TABLE.Pref_WebsiteID 
WHERE 
    PREF_TABLE.Pref_SavedTitle = 'AlabamaPREF' 
+0

Это фактически возвращает все места в таблице, а не только те, которые имели Pref_SavedTitle в списке – eqiz

+0

тем не менее, делать то же самое «AlabamaPREF». Его возвращение всех результатов в таблице Locations, как и инструкция WHERE, не имеет значения и игнорируется, хотя у меня есть точная копия, как у вас есть – eqiz

+0

Извините, я думаю, что не предсказал точное поведение. Попробуйте сейчас - ответ и запрос обновляются, и, надеюсь, теперь вы должны работать. –