如何处理MySQL变量以将查询转换为Amazon Redshift兼容格式
MySQL变量初始化语句转Amazon Redshift兼容格式的处理方法
原MySQL语句里用@a:=0这种方式初始化会话变量,但Amazon Redshift不支持这种MySQL风格的用户自定义会话变量语法,得换一种写法实现相同的初始化效果。
你尝试的写法方向是对的,但有两处问题需要修正:
- 后面的
INNER JOIN没有关联条件,本质是交叉连接,应该统一改成CROSS JOIN,否则Redshift会因为缺少连接条件报错; - 原语句里
@c初始化为空字符串'',你写成了null,这会导致初始值不符。
修正后的正确写法如下:
FROM abc INNER JOIN def ON abc.ledger_id = def.ledger_id CROSS JOIN (SELECT 0 AS a) AS a CROSS JOIN (SELECT 0 AS b) AS b CROSS JOIN (SELECT '' AS c) AS c
补充说明:
Redshift基于PostgreSQL生态,不支持MySQL的@变量语法。这类用来初始化临时值的独立子查询,因为和主表没有关联条件,所以用CROSS JOIN(笛卡尔积连接)是最准确的,它能把每个子查询的单行结果和主数据集做全量关联,达到和原MySQL语句里初始化变量相同的效果。
内容的提问来源于stack exchange,提问作者Prabal Chakraborty
相关产品推荐
相关产品推荐

