【发布时间】:2018-07-30 06:04:15
【问题描述】:
我有以下 MSSQL 查询:
select
innerqueryresult.intDoorID as DoorID,
innerqueryresult.vchrDoorName as DoorName,
innerqueryresult.vchrAddress as Address,
innerqueryresult.vchrDoor as Door,
innerqueryresult.dtmStartDate as StartDate
from
(
Select Distinct *
FROM ADoor dr
left join APositionAssign pos
on pos.intOrgLevelID = dr.intOrgLevelID
left join APositions p
on p.intPositionID = pos.intPositionID
left join APositionAssign posAssign
on posAssign.vchrDoor = dr.vchrDoor or posAssign.intOrgLevelID = dr.intOrgLevelID
Where dr.vchrDoor = '0000140'
) innerqueryresult
当我执行上面的查询时,它会返回:
消息 8156,级别 16,状态 1,第 1 行“vchrDoor”列是 为“innerqueryresult”指定了多次。
虽然内部查询是通过程序动态生成的,但我无法从查询中获取正确的别名。有没有办法在不知道别名的情况下运行查询。 谁能给我建议解决方案。
【问题讨论】:
-
这里的解决方案是明确列出您要选择的列(和表/别名)。如果那个内部
SELECT *选择了多个名为vchrDoor的列,那么用子查询包装确实无能为力。 -
不要使用
select distinct *,一列指定 -
你能提供一些示例数据和expext结果吗?
-
你不需要子查询,你应该摆脱它。
标签: sql sql-server join left-join