【问题标题】:SQL: Not being able to use column alias in where [duplicate]SQL:无法在 [重复] 中使用列别名
【发布时间】:2021-10-29 03:50:11
【问题描述】:

给定以下 sql 示例过程:

DECLARE @xmlvoucherSequenceList xml = '<?xml version="1.0"?><Voucher><Id Item1="6425"/></Voucher>'

select
    col.value('./@Item1','int') voucherSequence
    from @xmlvoucherSequenceList.nodes('/Voucher/Id') t(col) 
    where voucherSequence not in (
        ...
    )

我不明白为什么“voucherSequence”别名在 sql management studio 编辑器中以红色下划线显示为“未找到列凭证序列”。

如果我注释 where 部分并只运行选择,则凭证序列清楚地显示为列名(别名)。

奇怪的是,如果我用下一个查询替换上一个查询:

select
    col.value('./@Item1','int') voucherSequence
    from @xmlvoucherSequenceList.nodes('/Voucher/Id') t(col) 
    where col.value('./@Item1','int') not in (
        ...
    )

sql 编译器不会报错,查询工作正常,但我想在 where 中使用别名,这就是为什么 alias 的用途。

【问题讨论】:

  • 这是不允许的,根据 SQL 标准。请改用 CTE、子查询或横向连接。
  • 感谢@Gordon Linoff。可以举个例子吗?

标签: sql select stored-procedures alias


【解决方案1】:

您的代码看起来像 SQL Server。我会推荐:

select v.voucherSequence    
from @xmlvoucherSequenceList.nodes('/Voucher/Id') t(col) cross apply
     (values (t.col.value('./@Item1', 'int'))
     ) v(voucherSequence)
where v.voucherSequence not in (
    ...
)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多