是否可以在同一查询中对使用AS关键字形成的字段执行WHERE?

时间:2012-02-05 07:15:57

标签: mysql sql

例如,我有以下查询(请参阅How to produce a result set based on the comparison of values between two fields?):

select id,
       case nickname when '' then full_name else nickname end as new_name
from your_table

添加最后一行

时出现语法错误
select id,
       case nickname when '' then full_name else nickname end as new_name
from your_table
where new_name = 'Jen'

我可以使用WHERE语句过滤掉结果集吗?

3 个答案:

答案 0 :(得分:4)

您需要使用子查询:

select t.id, t.new_name from
(select id,
   case nickname when '' then full_name else nickname end as new_name
from your_table) t
where t.new_name = 'Jen'

答案 1 :(得分:2)

我使用MySQL已经有一段时间了,但试试

select id, 
       case nickname when '' then full_name else nickname end as new_name 
from your_table 
where case nickname when '' then full_name else nickname end = 'Jen'

或者,您可以使用子查询。在我发布此回复之后,我想到了这一点,而肯·怀特打败了我!我检查了一个本地数据库,两种方法的执行计划是相同的,尽管你的里程可能会有所不同。

答案 2 :(得分:2)

如果你在“select * from(...)”中删除第一个语句,你应该可以使用new_name字段名

ie - 使用子查询