如何修复AWSAthena的SQL
我正在将 SQL 从 Redshift 迁移到 AWS Athena,但是我遇到了麻烦,因为 SQL 给了我错误。
SELECT abc_name AS bca_name,
CASE
WHEN name = 'aaa' THEN 'AAC'
WHEN name = 'bbb' THEN 'BBA'
WHEN name = 'ccc' THEN 'CCB'
END AS abc
FROM master_table
WHERE abc IS NOT NULL;
这条 SQL 给了我一个错误:它说没有 abc 列,因为 where 子句中的 abc 比 select 子句中的读取时间早。
我怎样才能让它发挥作用?
回答
这是一个常见的 SQL 问题。您不能在同一查询的SELECT子句中引用子句中定义的别名WHERE。但是您甚至不需要使用别名来获得所需的逻辑,只需使用WHERE IN (...):
SELECT abc_name AS bca_name,
CASE name WHEN 'aaa' THEN 'AAC'
WHEN 'bbb' THEN 'BBA'
WHEN 'ccc' THEN 'CCB' END AS abc
FROM master_table
WHERE name IN ('aaa', 'bbb', 'ccc');
如果确实需要引用别名,则必须使用子查询或仅重复CASE表达式。对于前一个选项:
SELECT bca_name, abc
FROM
(
SELECT abc_name AS bca_name,
CASE name WHEN 'aaa' THEN 'AAC'
WHEN 'bbb' THEN 'BBA'
WHEN 'ccc' THEN 'CCB' END AS abc
FROM master_table
) t
WHERE abc IS NOT NULL;