如何引用当前范围?



我经常遇到列名冲突,如下面的人为示例:

with
weekdays('name') as (
values
('Monday')
, ('Tuesday')
, ('Wednesday')
, ('Thursday')
, ('Friday')
, ('Saturday')
, ('Sunday')
)
select
substr("name",1,3) as "name"
from weekdays
where 1==1
and "name" == 'Monday'
-- how do I reference current scope's name, where "name" == 'Mon'?

bash中,它将是:

and ./"name" == 'Monday'

引用当前作用域的name,而不是$PATH中的第一个name

有没有办法在SQLite中引用当前范围?

标准 SQL 不允许在WHERE子句中使用派生列的别名,因为SELECT是在WHERE之后处理的。

SQLite 允许这样做(可能是通过将WHERE子句中的别名替换为其各自的表达式),但是当与参与表/ctes 的列发生名称冲突时,别名列将被现有列遮蔽。

这意味着,在您的情况下,您无法直接引用别名列。
而是重复表达式:

and substr("name",1,3) = 'Mon'

或者,使用子查询:

select *
from (
select
substr("name",1,3) as "name"
from weekdays
)
where 1=1
and "name" = 'Mon'

或者,最好使用不同的非冲突别名。

请参阅演示。

相关内容

  • 没有找到相关文章

最新更新