根据SQL Server中的列值从不同的表中选择值

时间:2016-03-07 14:23:06

标签: sql-server

我有一个主表A,其中包含以下字段:

enter image description here

然后我有三个单独的表,每个表用于建筑物,教室和办公室。所有这些表都有两列; ID和名称。

我想查询表A以获得以下结果:

enter image description here

我该怎么做?

2 个答案:

答案 0 :(得分:1)

您的数据并未真正正常化。有三个单独的表都提供相同的查找会让你头疼...所以我将3个表组合在一起并创建了一个' src'列,以便您可以将表A的类型和Id连接回表B的ID和src。您最好拥有一张桌子和非重复ID以及类型ID,以指定它是否是建筑教室或办公室。

Select * 
from A
LEFT JOIN (SELECT 'Building' as src, ID, Name FROM Buildings UNION ALL
           SELECT 'Classroom' as src, ID, Name FROM Classrooms UNION ALL
           SELECT 'Office' as src, ID, Name FROM Offices) B
on A.Location_Type = B.Src
and A.LocationID = B.ID

我在这里使用了左连接,以防A中的所有记录都没有B中的关联记录。但是,内连接也应该有效。

答案 1 :(得分:0)

使用联接应该是可行的。

这些方面应该有效:

SELECT tabelA.ID, tabelA.Subject, tabelA.Date, tabelA.locationType, tabelB.location
FROM tabelA INNER JOIN tabelB on tabelA.locationID = tabelB.locationID