如何对由两个字段值生成的新创建字段执行WHERE子句过滤?
如何对拼接生成的新字段执行WHERE筛选?
你写的SQL里直接用SELECT定义的别名newly_created_field在WHERE子句里会报错,这是因为SQL的执行顺序是先处理FROM、WHERE,再处理SELECT——也就是说,当执行WHERE的时候,你在SELECT里定义的别名还没生成,数据库根本找不到这个字段。
给你两种可行的解决办法:
方法一:直接在WHERE里复用生成表达式
把SELECT里生成newly_created_field的逻辑原封不动搬到WHERE里:
select upper(column_a + ' ' + column_b) as newly_created_field, some_other_field from table_xyz where upper(column_a + ' ' + column_b) = 'NEW VALUE'
方法二:用子查询/CTE提前生成字段
如果表达式比较复杂,不想重复写,可以先通过子查询或者CTE把新字段生成出来,再在外层做筛选:
子查询写法
select newly_created_field, some_other_field from ( select upper(column_a + ' ' + column_b) as newly_created_field, some_other_field from table_xyz ) as sub_query where newly_created_field = 'NEW VALUE'
CTE写法(适用于支持CTE的数据库,如MySQL 8+、PostgreSQL、SQL Server等)
with temp_table as ( select upper(column_a + ' ' + column_b) as newly_created_field, some_other_field from table_xyz ) select newly_created_field, some_other_field from temp_table where newly_created_field = 'NEW VALUE'
内容的提问来源于stack exchange,提问作者pithhelmet
相关产品推荐
相关产品推荐

