#sql #oracle #common-table-expression
#sql #Oracle #common-table-expression
Вопрос:
Пожалуйста, как я могу переписать этот запрос с помощью 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)
Комментарии:
1. Что вы пробовали? Это не особенно сложно.
2.
DISTINCT
не является функцией. Кроме того, что не так с существующим запросом? Как вы ожидаете, что предложение факторизации подзапроса (также известное как CTE) улучшит запрос по сравнению с использованием или?IN
EXISTS
3. Я изучаю, как использовать CTE, поэтому я хотел попробовать использовать его в этом запросе, как пример. но я думаю, что знаю, что этот вариант оптимален для того, чего я пытался достичь с помощью этого запроса.
Ответ №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;
Комментарии:
1. о, я думал, что не смогу указать соединение в CTE .. Я увидел это, когда попытался выполнить поиск в Интернете… очевидно, что я очень большой новичок… спасибо .. это сработало