2012-02-15 4 views
0

У меня проблема, когда мне нужно выбрать данные из трех разных таблиц и форматировать определенным образом. Я пробовал JOINS, UNIONS ... и различные операторы select, но не могу получить формат так, как хотелось бы.SQL Выберите данные из трех таблиц

Таблицы как таковые:

Таблица 1 (область таблицы)

ID |Area 
----|----- 
1 | England 
2 | Wales 
3 | Scotland 
4 | Ireland 

В таблице 2 (таблица сайта)

ID |AreaID |Site  
--- |--------|-----  
1 | 1  | London 
2 | 1  | Bath 
3 | 2  | Cardiff 
4 | 3  | Edinburgh 

Таблица 3 (Место таблица)

ID |AreaID |TownID  | Location  
--- |---------|-----------|----- 
1 | 1  | 1   | Sussex 
2 | 1  | 1   | Mitcham 
3 | 2  | 2   | Canton 

Теперь мне нужно выбрать данные из всех трех таблиц, чтобы произвести следующее:

AreaID |AreaName |SiteID  | SiteName | LocationID | LocationName  
------- |-----------|-----------|---------- -|--------------|---------- 
1  | England | 1   | London  | 1   | Sussex  
1  | England | 1   | London  | 2   | Mitcham 
2  | Wales  | 3   | Cardiff | 3   | Canton 
3  | Scotland | 3   | Edinburgh | NULL   | NULL  
4  | Ireland | NULL  | NULL  | NULL   | NULL 

Так, в основном, Расположение входа требуется объект сайта и Entity сайта требуется площадь. Но для Района не требуется сайт, и сайту не требуется местоположение.

Надеюсь, что это имеет смысл.

Если кто-то может помочь, был бы очень признателен.

+2

Вы пробовали * ЛЕВЫЕ * JOIN и? Это кажется довольно простым приложением для них. –

ответ

5

Это кажется прямо вперед LEFT JOIN:

SELECT a.ID AS AreaID, a.Area AS AreaName, 
     s.ID AS SiteID, s.Site AS SiteName, 
     l.ID AS LocationID, l.Location AS LocationName 
FROM Area a 
    LEFT JOIN Site s ON s.AreaID = a.ID 
    LEFT JOIN Location l ON l.AreaID = a.ID 

Надеется, что это помогает

+0

Кажется, так просто, если вы знаете, как .... – JayT

Смежные вопросы