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
);