UNION не выводит все столбцы

Хочу создать оконную функцию которая будет показывать проблемы с объектами в базе. Планировалось выводить фильмы, актеров, компании Я написал

CREATE VIEW static
AS (
  (SELECT title FROM title t
    LEFT JOIN cast_info ci on t.id=ci.movie_id
    WHERE kind_id=1 and ci.role_id !=1 and ci.role_id !=2)
 UNION ALL
  (SELECT  name FROM name n
    LEFT JOIN cast_info ci ON n.id=ci.person_id
    WHERE ci.person_id IS NULL)
 UNION ALL
  (SELECT name FROM company_name cm
    LEFT JOIN movie_companies mc ON cm.id=mc.company_id
    WHERE mc.company_id IS NULL)
 )

У меня не появляются ошибки, но выводится только 1 столбец title, как это исправить?


Ответы (1 шт):

Автор решения: Akina

Предполагаю, что надо нечто типа

CREATE VIEW static
AS (
WITH
cte1 AS (SELECT title, ROW_NUMBER() OVER (ORDER BY title) rn 
         FROM title t
         LEFT JOIN cast_info ci on t.id=ci.movie_id
         WHERE kind_id=1 and ci.role_id !=1 and ci.role_id !=2),
cte2 AS (SELECT name, ROW_NUMBER() OVER (ORDER BY name) rn
         FROM name n
         LEFT JOIN cast_info ci ON n.id=ci.person_id
         WHERE ci.person_id IS NULL),
cte3 AS (SELECT name, ROW_NUMBER() OVER (ORDER BY name) rn
         FROM company_name cm
         LEFT JOIN movie_companies mc ON cm.id=mc.company_id
         WHERE mc.company_id IS NULL)
SELECT cte1.title film_title, cte2.name actor_name, cte3.name company_name
FROM cte1
FULL JOIN cte2 USING (rn)
FULL JOIN cte3 USING (rn)
);

Правда, пока не понимаю, что есть "проблемы с объектами в базе"...


Ещё один вариант интерпретации задания:

CREATE VIEW static
AS (SELECT title entity, 'film' type
    FROM title t
    LEFT JOIN cast_info ci on t.id=ci.movie_id
    WHERE kind_id=1 and ci.role_id !=1 and ci.role_id !=2
   UNION ALL
    SELECT  name, 'actor'
    FROM name n
    LEFT JOIN cast_info ci ON n.id=ci.person_id
    WHERE ci.person_id IS NULL
   UNION ALL
    SELECT name, 'company'
    FROM company_name cm
    LEFT JOIN movie_companies mc ON cm.id=mc.company_id
    WHERE mc.company_id IS NULL
   );
→ Ссылка