如何修复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;


以上是如何修复AWSAthena的SQL的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>