#postgresql #union
#postgresql #объединение
Вопрос:
Я годами не выполнял никаких SQL-запросов. Я столкнулся с проблемой, которая кажется мне довольно простой, но, похоже, я не могу решить ее в разумные сроки. Допустим, у меня есть две таблицы, которые я извлекаю из базы данных с помощью инструкции select:
table1:
id name status
1 record1 ACTIVE
2 record2 ACTIVE
table2:
id name status
1 record3 DELETED
2 record1 DELETED
Я хотел бы иметь третью таблицу, которая выглядит следующим образом:
table3:
id name status
1 record1 ACTIVE
2 record2 ACTIVE
3 record3 DELETED
Таким образом, в принципе, если столбец присутствует в таблице «ACTIVE», он должен быть показан в третьей таблице (table3) как АКТИВНЫЙ, независимо от столбца, который имеет то же имя в таблице «DELETED». Кроме того, если столбец с определенным именем присутствует в таблице «УДАЛЕНО», но не в «АКТИВНОМ», он также должен отображаться как УДАЛЕННЫЙ.
Я надеюсь, что я объяснил проблему достаточно ясно. Это моя первая публикация в stackoverflow, и я надеюсь, что вы, ребята, мне поможете. Спасибо! 🙂
Комментарии:
1. Помечайте только базу данных, которую вы используете.
Ответ №1:
Я думаю, вы хотите:
select a.*
from actives a
union all
select d.*
from deletes d
where not exists (select 1 from actives a where a.name = d.name);
Комментарии:
1. Спасибо за очень быстрый ответ! К сожалению, псевдоним «actives» не отображается в предложении WHERE. 🙁
2. обновление: я только что снова добавил запрос вместо псевдонима. Вы были действительно полезны, еще раз спасибо! 🙂