Я не могу заставить этот запрос работать так, как я хочу. У меня есть две таблицы с почти идентичными данными, но я хочу, чтобы одна переопределила другую, если она существует Пример будет проще, чем пытаться объяснить:
Таблица несбалансированного баланса:
![unadjusted_balance](https://i.stack.imgur.com/1za0x.png)
и отдельная таблица корректировок для каждого баланса
![enter image description here](https://i.stack.imgur.com/CxldB.png)
желаемый вывод берет нескорректированные сальдо и применяет любые существующие корректировки поверх него (если is_current = 1) ... по существу, заменяя строку, но сохраняя исходный нескорректированный current_balance.
желаемый результат будет примерно таким:
![enter image description here](https://i.stack.imgur.com/16HsP.png)
вот мой текущий запрос, который работает не так, как я хочу ... это переворачивание значений и отсутствие current_balance. Я пытался это часами и не могу никуда добраться:
SELECT
*
FROM
(
SELECT
balance_adjustments.name,
balance_adjustments.user_id,
balance_adjustments.amount_owed,
balance_adjustments.when_to_pay,
balance_adjustments.current_balance
FROM
balance_adjustments
WHERE
balance_adjustments.when_to_pay = '2018-11-05'
AND balance_adjustments.is_current = true
UNION ALL
SELECT
unadjusted_balance.name,
unadjusted_balance.user_id,
unadjusted_balance.amount_owed,
unadjusted_balance.when_to_pay,
unadjusted_balance.current_balance
FROM
unadjusted_balance
LEFT OUTER JOIN balance_adjustments ON balance_adjustments.user_id = unadjusted_balance.user_id
AND balance_adjustments.name = unadjusted_balance.name
AND balance_adjustments.when_to_pay = unadjusted_balance.when_to_pay
AND balance_adjustments.is_current = true
WHERE
unadjusted_balance.when_to_pay = '2018-11-05'
AND balance_adjustments.name IS NULL
) AS table1
некоторые дополнительные команды, которые помогут любому настроить этот сценарий для проверки:
CREATE TABLE balance_adjustments
(
name varchar(30),
user_id varchar(30),
amount_owed float,
when_to_pay datetime,
current_balance float,
is_current boolean
);
CREATE TABLE unadjusted_balance
(
name varchar(30),
user_id varchar(30),
amount_owed float,
when_to_pay datetime,
current_balance float
);
insert into balance_adjustments values ('ricardo', '82340001', 100.00, '2018-11-05', null, 1)
insert into balance_adjustments values ('ricardo', '82340001', 33.00, '2018-11-05', null, 0)
insert into unadjusted_balance values ('joseph', '82340000', 2400.00, '2018-11-05', 4049.00)
insert into unadjusted_balance values ('ricardo', '82340001', 899.00, '2018-11-05', 500.00)
спасибо за любую помощь