(Общие табличные выражения) CTE как часть предложения WHERE ... возможно? - PullRequest
1 голос
/ 01 июля 2010

Можно ли использовать CTE в предложении WHERE, например:

SELECT * 
  FROM Table1 
 WHERE Table1.PK IN (
   WITH Cte AS (
    -- root selection (dynamic, generated in code)
    SELECT Bla FROM Table2
    -- recursive part
    UNION ALL
    SELECT …..)
  SELECT Bla FROM Cte)

Причина, по которой я спрашиваю, состоит в том, что мне нужно использовать рекурсивный запрос, и единственный способ сделать это в данный момент без обновления нашей инфраструктуры - поместить его в предложение where.

Ответы [ 2 ]

3 голосов
/ 01 июля 2010

Нет, предложения WITH должны быть определены до основного SELECT.Например:

WITH recursive_cte AS (
   -- root selection (dynamic, generated in code)
   SELECT Bla FROM Table2
   -- recursive part
   UNION ALL
   SELECT …..)
SELECT t.*
  FROM TABLE1 t
  JOIN recursive_cte rc ON rc.key = t.pk

Я также настроил запрос, чтобы вместо него использовать JOIN, но вам придется следить за дубликатами.

0 голосов
/ 26 декабря 2013

Да, вы можете применять ГДЕ ОГОВОРКУ с CTE. Вы должны создать табличную функцию и вернуть результат в таблицу. затем вы можете использовать этот набор результатов в любом запросе с предложением WHERE. Перейдите по ссылке и найдите пример:
http://muhammadnaveed.info/use-cte-query-in-where-clause/ Надеюсь, это поможет вам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...