列别名与另一列名称之间的歧义



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

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

这很好用。但是,如果我想订购它们,例如

order by lower(name) asc

我得到错误ambiguous column name: name,因为sqlite不知道是使用a的、b的还是选择的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

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

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

最新更新