Используйте SELECT подзапрос в UNION - PullRequest
0 голосов
/ 22 января 2020

У меня есть две таблицы:

Таблица 1

Table 1

Таблица 2

Table 2

Я пытаюсь написать запрос, чтобы ВЫБРАТЬ все записи для обеих таблиц, используя UNION (столбцы ID, Дата и количество). Таблицы связаны по идентификатору. Однако при выборе записей в Таблице 2 во время UNION, если соответствующий идентификатор в Таблице 1 имеет значение True или False, равное TRUE, я хочу изменить дату записи в Таблице 2 на дату в Таблице 1, в конечном итоге достигнув этого:

Output

Возможно ли это?

Ответы [ 2 ]

2 голосов
/ 22 января 2020

Второй запрос UNION ALL должен быть объединением таблиц:

select id, date, amount 
from Table1
union all
select 
  t2.id,
  case when t1.trueorfalse = 'TRUE' then t1.date else t2.date end
  t2.amount
from Table2 t2 inner join Table1 t1
on t1.id = t2.id

Выражение CASE возвратит либо дату из таблицы 1, либо из таблицы 2. Если ваша база данных поддерживает логический тип данных, возможно, вам следует использовать TRUE вместо 'TRUE'.

0 голосов
/ 22 января 2020

Это кажется удобным местом для использования бокового соединения, если ваша база данных поддерживает это:

select v.*
from table1 t1 join
     table2 t2
     on t1.id = t2.id cross join lateral
     (values (t1.id, (case when t1.true_or_false = 'true' then t2.date else t1.date end), t1.amount),
             (t2.id, t2.date, t2.amount)
     ) v(id, date, amount);
...