Объединение SQL, похоже, не удается для меня

#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. обновление: я только что снова добавил запрос вместо псевдонима. Вы были действительно полезны, еще раз спасибо! 🙂