PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Wiele CTE w jednym zapytaniu

Użyj słowa kluczowego WITH raz na górze. Jeśli którekolwiek z Twoich wspólnych wyrażeń tabelowych (CTE) jest rekurencyjne (rCTE), musisz dodać słowo kluczowe RECURSIVE u góry raz także, nawet jeśli nie wszystkie CTE są rekurencyjne:

WITH RECURSIVE
  cte1 AS (...)         -- can still be non-recursive
, cte2 AS (SELECT ...
           UNION ALL
           SELECT ...)  -- recursive term
, cte3 AS (...)
SELECT ... FROM cte3 WHERE ...

Instrukcja:

Jeśli RECURSIVE jest określony, pozwala SELECT podzapytanie odwołuje się do siebie według nazwy.

Moje odważne podkreślenie. I jeszcze bardziej wnikliwe:

Kolejny efekt RECURSIVE czy to WITH zapytania nie muszą być zamawiane :zapytanie może odwoływać się do innego, które znajduje się później na liście. (Jednak odwołania cykliczne lub wzajemna rekurencja nie są zaimplementowane.) Bez RECURSIVE , WITH zapytania mogą odnosić się tylko do rodzeństwa WITH zapytania, które znajdują się wcześniej w WITH lista.

Znowu śmiały nacisk. Oznacza to, że kolejność WITH klauzule są bez znaczenia kiedy RECURSIVE użyto słowa kluczowego.

BTW, ponieważ cte1 i cte2 w przykładzie nie są przywoływane w zewnętrznym SELECT i są proste SELECT same komendy (brak efektów ubocznych), nigdy nie są wykonywane (chyba że jest do nich odwołanie w cte3 ).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak zadeklarować zmienną w zapytaniu PostgreSQL

  2. MySQL czy PostgreSQL? Który powinienem wybrać do mojego projektu Django?

  3. Mountain Lion Postgres nie mógł się połączyć

  4. pghoard Alternatywy - Zarządzanie kopiami zapasowymi PostgreSQL z ClusterControl

  5. Wybierz wiersze, których nie ma w innej tabeli