【问题标题】:Converting subquery to CTE将子查询转换为 CTE
【发布时间】:2021-01-05 20:14:26
【问题描述】:

请问如何使用 cte 重写此查询

select distinct(ref_device_id)
from heart_beat
where ref_device_id in (select DEVICE_ID
                        from enrollment_ref er
                        join node n on n.enrollment_ref = er.id)

【问题讨论】:

  • 你试过什么?这并不是特别棘手。
  • DISTINCT 不是函数。另外,现有查询有什么问题?与使用 INEXISTS 相比,您希望子查询分解子句(又名 CTE)如何改进查询?
  • 我正在学习如何使用 CTE,所以我想尝试在类似示例的查询中使用它。但我想我知道这个最适合我试图通过该查询实现的目标。

标签: sql oracle common-table-expression


【解决方案1】:

你可以使用:

WITH cte ( device_id ) AS (
  SELECT device_id
  FROM   enrollment_ref er
         INNER JOIN node n
         ON ( n.enrollment_ref = er.id )
)
SELECT DISTINCT
       ref_device_id
FROM   heart_beat
WHERE  ref_device_id in ( SELECT device_id FROM cte );

WITH cte ( ref_device_id ) AS (
  SELECT DISTINCT
         ref_device_id
  FROM   heart_beat
  WHERE  ref_device_id in (
           SELECT device_id
           FROM   enrollment_ref er
                  INNER JOIN node n
                  ON ( n.enrollment_ref = er.id )
         )
)
SELECT ref_device_id
FROM   cte;

【讨论】:

  • 哦,我以为我无法在 CTE 中指定加入。我在尝试在线搜索时看到了这一点……很明显我是一个非常大的新手……谢谢你..这工作
猜你喜欢
  • 1970-01-01
  • 2012-02-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多