Можно ли присоединиться к CTE в PostgreSQL? - PullRequest
0 голосов
/ 28 июня 2018

Я пытаюсь написать запрос, подобный этому

WITH a AS (SELECT key FROM table) 
SELECT * 
FROM a 
  JOIN b;

, которая генерирует синтаксическую ошибку в PostgreSQL 10.4.

Почему появляется эта ошибка?

Похоже, я буду создавать вид вместо этого. Есть ли лучшее решение?

Ответы [ 2 ]

0 голосов
/ 28 июня 2018

Проблема не в CTE, а в простой синтаксической ошибке:

SELECT * 
FROM a 
JOIN b
-- something missing here

Здесь JOIN по умолчанию - INNER JOIN, что требует некоторого условия, для которого должны быть объединены строки - как правило, как ON a.key = b.key или USING key. То же самое можно сказать о LEFT OUTER JOIN или RIGHT OUTER JOIN.

Если вам нужны все возможные комбинации (редкие, но иногда полезные), вы должны использовать CROSS JOIN:

SELECT * 
FROM a 
CROSS JOIN b;

Или аналогичный оператор запятой:

SELECT * 
FROM a, b;
0 голосов
/ 28 июня 2018

Вам не хватает условия JOIN:

WITH a AS (SELECT key FROM table) 
SELECT * 
FROM a 
  JOIN b <b>ON a.key = b.key</b>;
...