SQL从三个表中选择数据

时间:2012-02-15 20:03:20

标签: sql sql-server

我有一个问题,我需要从三个不同的表中选择数据,并以指定的方式格式化。我尝试过JOINS,UNIONS ......以及各种select语句,但无法按照我想要的方式获取格式。

表格如下:

表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

因此,基本上,位置输入需要站点实体,站点实体需要区域。但是区域不需要站点,站点不需要位置。

希望这是有道理的。

如果有人能提供帮助,我将不胜感激。

1 个答案:

答案 0 :(得分: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

希望这有帮助