snowflake中如何将(+)转换成对应的join
How to convert (+) into corresponding join in snowflake
谁能告诉我如何将 Oracle (+) 转换为雪花连接,有没有可行的转换方法。
我有一个非常复杂的 1k 行 SQL 脚本,它需要 30+ (+) 个运算符作为连接。
谁能帮帮我
您可以将 Oracle 的外连接语法转换为 ANSI 语法。因此它将与 Snowflake 和世界其他地方兼容(甚至 Oracle 也支持 ANSI 连接语法)。您应该手动重写它们,但这并不难:
甲骨文:
SELECT d.department_name,
e.employee_name
FROM departments d, employees e
WHERE d.department_id = e.department_id (+)
AND d.department_id >= 30
ORDER BY d.department_name, e.employee_name;
ANSI
SELECT d.department_name,
e.employee_name
FROM departments d
LEFT OUTER JOIN employees e ON d.department_id = e.department_id
WHERE d.department_id >= 30
ORDER BY d.department_name, e.employee_name;
您可以在该页面上找到解释(对于 left/right/outer 联接):
https://oracle-base.com/articles/misc/sql-for-beginners-joins#left-outer-join
Snowflake 根据 WHERE clause documentation.
支持 (+) 运算符
谁能告诉我如何将 Oracle (+) 转换为雪花连接,有没有可行的转换方法。
我有一个非常复杂的 1k 行 SQL 脚本,它需要 30+ (+) 个运算符作为连接。
谁能帮帮我
您可以将 Oracle 的外连接语法转换为 ANSI 语法。因此它将与 Snowflake 和世界其他地方兼容(甚至 Oracle 也支持 ANSI 连接语法)。您应该手动重写它们,但这并不难:
甲骨文:
SELECT d.department_name,
e.employee_name
FROM departments d, employees e
WHERE d.department_id = e.department_id (+)
AND d.department_id >= 30
ORDER BY d.department_name, e.employee_name;
ANSI
SELECT d.department_name,
e.employee_name
FROM departments d
LEFT OUTER JOIN employees e ON d.department_id = e.department_id
WHERE d.department_id >= 30
ORDER BY d.department_name, e.employee_name;
您可以在该页面上找到解释(对于 left/right/outer 联接):
https://oracle-base.com/articles/misc/sql-for-beginners-joins#left-outer-join
Snowflake 根据 WHERE clause documentation.
支持 (+) 运算符