【问题标题】:Remove Duplicate column names from the subquery and fetch only the selective columns从子查询中删除重复的列名并仅获取选择性列
【发布时间】: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


【解决方案1】:

正如其他人作为 cmets 发布的(不知道为什么):不要使用 SELECT * 这总是一件微妙的事情,因为如果您添加任何列,您的应用程序可能会崩溃。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-12
    • 2019-08-19
    • 2022-08-16
    • 2021-04-06
    • 2014-09-23
    • 1970-01-01
    • 2017-09-16
    • 2017-07-11
    相关资源
    最近更新 更多