Создание SQL UNION, где вторая сторона объединения зависит от первой стороны - PullRequest
3 голосов
/ 23 октября 2011

Я бы хотел выполнить объединение двух запросов, где второй запрос зависит от первого:

SELECT * FROM company_res t1
UNION
SELECT * FROM company_res t2
WHERE t2.company_id IN (
  SELECT c.id
  FROM company c
  WHERE c.parent_id = t1.company_id
)
ORDER BY company_id, year_code

Однако, когда я запускаю этот запрос в psql, я получаю сообщение о том, что t1 во втором запросе имеет FROM -клаузу.

Возможно ли иметь UNION запросов на буксировку, которые зависят друг от друга?

Ответы [ 2 ]

2 голосов
/ 23 октября 2011

Из вашего частичного примера я думаю, что вы пытаетесь сделать рекурсивный запрос , а не классический запрос UNION, что является преимуществом для UNIONS, если факт.

Вам нужновыполните несколько выборок для company_res, а затем добавьте родителей этих компаний.

Основная форма:

WITH RECURSIVE t(n) AS (
    SELECT 1
  UNION ALL
    SELECT n+1 FROM t
)
SELECT n FROM t LIMIT 100;

В вашем случае что-то подобное может быть:

WITH RECURSIVE rectable(
 company_id,
 field2,
 field3,
 parent_id) AS (
    -- here the starting rows, t1 in your example
    SELECT 
      company_res.company_id,
      company_res.field2,
      company_res.field3,
      company.parent_id
    FROM company_res
    INNER JOIN company ON company_res.company_id=company.id
    WHERE (here any condition on the starting points)
  UNION ALL
    -- here the recursive part
    SELECT 
     orig.company_id,
     orig.field2,
     orig.field3,
     orig.parent_id
    FROM rectable rec,company_res orig
    INNER JOIN company ON orig.company_id=company.id
    WHERE company.parent_id=rec.company_id
    -- here you could add some AND sections if you want
)
SELECT company_id,field2, field3,parent_id
FROM rectable
ORDER BY parent_id;
0 голосов
/ 23 октября 2011

SELECT * FROM company_res t1 в вашем запросе предоставит вам все, начиная с company_res, независимо от того, что еще вы UNION сделаете из company_res.Я сомневаюсь, что это то, что вы ищете.Смотри ответ от Шахкалпеш.

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