首页 > 解决方案 > 列别名与另一列名称之间的歧义

问题描述

我有一些列名重叠的表,我想将这些列组合成一个与别名同名的列,例如

select a.name || " " || b.name as name from a join b

这工作正常。但是,如果我想订购它们,例如

order by lower(name) asc

我收到错误ambiguous column name: name,因为 sqlite 不知道是使用a's、b's 还是选择的name列。我的问题是是否可以专门选择选择的name列(不给它一个不同的别名)?也许有一些不错<keyword><keyword>.name结果会出现在选择的name列中。还是真的没有比这更好的解决方案了

with tmp as (select tmp_a.name || " " || tmp_b.name as name from tmp_a join tmp_b)
select name from tmp order by lower(name) asc

标签: sqliteambiguous

解决方案


我不认为使用 CTE 或子查询不是一个好的解决方案。
如果您不喜欢它们,唯一的方法是重复ORDER BY子句中的表达式:

select a.name || ' ' || b.name as name 
from a join b
on ......
order by lower(a.name || ' ' || b.name)

推荐阅读