我在使用以下sql查询时出错。它说
"列'类型'被多次指定为' M'"。
' M'之后
(SELECT * FROM [ToolManagement].[dbo].[tblTools] K JOIN [ToolManagement].[dbo].[tblToolTypes] L ON K.ToolType = L.ToolType)
在sql management studio中加下划线。
SELECT A.EntryID, A.Time, B.Name, B.Number, C.Number, D.StationNr, E.Number, E.Pressure, F.Nickname, F.Number, G.Format, G.Format, G.ID2, H.Description, I.Comment, M.Description
FROM [...] A
JOIN [...] B ON A.EntryID = B.EntryID
JOIN [...] C ON A.EntryID = C.EntryID
JOIN [...] D ON A.EntryID = D.EntryID
JOIN [...] E ON A.EntryID = E.EntryID
JOIN [...] F ON A.EntryID = F.EntryID
JOIN [...] G ON A.EntryID = G.EntryID
JOIN [...] H ON A.EntryType = H.EntryType
LEFT OUTER JOIN [...] I ON A.EntryID = I.EntryID
JOIN (SELECT * FROM [...] K JOIN [...] L ON K.Type = L.Type) M ON A.ID = M.ID
WHERE A.ID = '1234'
答案 0 :(得分:2)
问题是您的内部查询是从K和L中选择type
列。看到您的内部查询选择每个表中的每一列,因此结果中会有2 type
列;来自K的1和来自L的一个。您需要确保只返回一个名为type
的列,或者另一列的别名具有不同的名称。
SELECT * FROM [...] K JOIN [...] L ON K.Type = L.Type
K.Type
和M.Type
都将作为M.type
返回,因此您的外部查询无法确定返回哪两个。如果Type
是您在该子查询中实际需要的唯一列,则只需返回K.type
:
SELECT K.Type FROM [...] K JOIN [...] L ON K.Type = L.Type
答案 1 :(得分:1)
这里的问题是,在子查询中,您将M
别名为SELECT *
,并且连接中涉及的两个表都有一个Type
列。 SQL Server理所当然地抱怨它不知道您要选择哪个Type
列。
您只使用子查询中的单个类型列,并且连接条件确保两者都相同,因此只需选择其中一个:
SELECT
A.EntryID, A.Time, B.Name, B.Number, C.Number, D.StationNr, E.Number,
E.Pressure, F.Nickname, F.Number, G.Format, G.Format, G.ID2, M.Description,
I.Comment, M.Type
FROM [...] A
JOIN [...] B ON A.EntryID = B.EntryID
JOIN [...] C ON A.EntryID = C.EntryID
JOIN [...] D ON A.EntryID = D.EntryID
JOIN [...] E ON A.EntryID = E.EntryID
JOIN [...] F ON A.EntryID = F.EntryID
JOIN [...] G ON A.EntryID = G.EntryID
JOIN [...] H ON A.EntryType = H.EntryType
LEFT OUTER JOIN [...] I ON A.EntryID = I.EntryID
JOIN (SELECT L.Type, L.Description FROM [...] K JOIN [...] L
ON K.Type = L.Type) M ON A.ID = M.ID
WHERE A.ID = '1234'
请注意,顶级的select语句当然可以包含两个或多个具有相同名称的列/别名。只有在尝试从这样的表中进行选择时才会出现问题。