【问题标题】:How to convert Oracle inline queries to snowflake如何将 Oracle 内联查询转换为雪花
【发布时间】:2021-09-13 04:43:35
【问题描述】:

有人可以帮助了解如何将 sql 内联查询转换为 Snowflake。由于 Snowflake 不支持内联查询,

内联查询示例:

SELECT   
    xsgq.name,
    (SELECT attribute3
     FROM employee
     WHERE employee_id = xsgq.employee_id) AS "planTitle",
    ROUND (xsgq.goal_value, 2) AS "goal"
FROM 
    employee_ext xsgq, region_ext Xcpe           
WHERE     
    xsgq.employee_id = 41825
    AND xsgq.fiscal_year IN (2021,2020,2019)
    AND Xcpe.region = 'USA'
GROUP BY              
    xsgq.employee_id,
ORDER BY 
    xsgq.start_date DESC

谢谢, 尼基尔

【问题讨论】:

  • Bad habits to kick : using old-style JOINs - 旧式 逗号分隔的表格列表 样式已替换为 ANSI 中的 proper ANSI JOIN 语法-92 SQL 标准(近 30 年前),不鼓励使用它
  • 好吧,对于这个例子来说,简单地内部连接雇员表就足够了。更通用的解决方案是外连接。
  • 为了清楚起见,Snowflake 确实支持内联查询。您可能正在考虑子选择。
  • 是的,格雷格,实际上我正在尝试转换一个 oracle 光标。其中有多个子选择查询。

标签: sql join snowflake-cloud-data-platform


【解决方案1】:

重写是左连接。 xsgq 和 Xcpe 之间的连接也是 ANSI 样式的交叉连接。您没有从Xcpe 中选择任何列,请检查您是否需要它,或者您可能过度简化了查询。无论如何,内联员工查询可以重写为左连接:

SELECT   
    xsgq.name,
    emp.attribute3 AS "planTitle",
    ROUND (xsgq.goal_value, 2) AS "goal"
FROM 
    employee_ext xsgq 
    cross join ( select * from region_ext Xcpe where Xcpe.region = 'USA') Xcpe 
    left join employee emp on emp.employee_id = xsgq.employee_id       
WHERE     
    xsgq.employee_id = 41825
    AND xsgq.fiscal_year IN (2021,2020,2019)
GROUP BY              
    xsgq.employee_id,
ORDER BY 
    xsgq.start_date DESC

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-07
    • 2021-08-31
    • 2022-07-18
    • 1970-01-01
    • 2021-12-13
    • 1970-01-01
    相关资源
    最近更新 更多