愚蠢的问题,但我找不到正确的搜索这个问题,我有一个心态障碍。我有一个表与参考表中的键,我想避免使用循环来选择没有重复的记录。我需要将模式1-5加入,这样我就可以获得没有重复的名称。请留下评论,以便澄清。
模式(1-5)是ModeID
示例:
加入表
ID
Mode1
Mode2
Mode3
Mode4
Mode5
参考表
ModeID
ModeName
答案 0 :(得分:6)
这是你问题的答案:
SELECT
m1.ModeName,
m2.ModeName,
m3.ModeName,
m4.ModeName,
m5.ModeName
FROM Modes m
LEFT JOIN Ref m1 on m1.ModeID = m.Mode1
LEFT JOIN Ref m2 on m2.ModeID = m.Mode2
LEFT JOIN Ref m3 on m3.ModeID = m.Mode3
LEFT JOIN Ref m4 on m4.ModeID = m.Mode4
LEFT JOIN Ref m5 on m5.ModeID = m.Mode5
但我建议您的数据库设计存在问题。您应该使用连接表。
答案 1 :(得分:1)
我认为在视图中对表格进行取消操作将有助于克服许多选择查询的长期表格设计。 (特别是当某人有天才的想法添加第六种模式时: - )
CREATE VIEW UnpivotedTable AS
SELECT
ID, Mode, ModeId
FROM
TableToJoin
UNPIVOT (ModeId FOR mode IN (Mode1,Mode2,Mode3,Mode4,Mode5)) AS t
GO
您的查询将成为一个相当“经典”的PIVOT查询(但这不是我的答案。点不透视的观点)
select Id, Mode1, Mode2, Mode3, Mode4, Mode5
from (
select
Id, Mode, ModeName
from
UnpivotedTable
inner join
ReferenceTable
on ReferenceTable.ModeId = UnpivotedTable.ModeId
) as sourcetable
pivot (
max(ModeName)
for Mode in (Mode1, Mode2, Mode3, Mode4, Mode5)
) as pivotTable
希望这对长远来说有所帮助。对不起,迟到了