cte sql для простого подмножества запроса для JPA - PullRequest
0 голосов
/ 26 февраля 2019

Как мы можем изменить ниже запроса CTE (рекурсивный) на простое подмножество sql:

  WITH links (parent, child) AS
  ( SELECT parent, child
        FROM Heirarchy_Table
        WHERE parent = '111111'
   UNION ALL 
    SELECT ht.parent, ht.child
        FROM Heirarchy_Table ht
        INNER JOIN links ON links.child = ht.parent)
SELECT * FROM links fl;

Мне нужно использовать этот запрос для JPA, так как JPA не обрабатывает предложение «WITH».[Примечание: cte "links" используется рекурсивно].Большое спасибо !!

1 Ответ

0 голосов
/ 26 февраля 2019

Как мы можем изменить ниже CTE-запрос (рекурсивный) на простое подмножество sql:

Создать представление.

create view links
as
WITH links (parent, child) AS
( SELECT parent, child
    FROM Heirarchy_Table
    WHERE parent = '111111'
UNION ALL 
SELECT ht.parent, ht.child
    FROM Heirarchy_Table ht
    INNER JOIN links ON links.child = ht.parent)
SELECT * FROM links fl;

Тогда вы можете просто запросить представление

select * from links

Или вы можете использовать встроенную табличную функцию, иногда называемую «параметризованным представлением», например:

create or alter function GetLinks(@parent int)
returns table
as 
return
WITH links (parent, child) AS
(SELECT parent, child
    FROM Heirarchy_Table
    WHERE parent = @parent
UNION ALL 
SELECT ht.parent, ht.child
    FROM Heirarchy_Table ht
    INNER JOIN links ON links.child = ht.parent)
SELECT * FROM links fl;

, к которой вы можете обращаться, например:

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