MySQL: как «перезаписать» данные в первой таблице, если во второй таблице найден совпадающий идентификатор и ДОБАВЛЕНО что пропущено - PullRequest
0 голосов
/ 15 мая 2018

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

balance_first


+----+---------+
| id | balance |
+----+---------+
|  1 |      12 |
|  2 |      50 |
|  3 |       0 |
|  4 |      55 |
+----+---------+



balance_second

+----+---------+
| id | balance |
+----+---------+
|  2 |     7.5 |
|  4 |    2.33 |
| 10 |    1.23 |
+----+---------+

Я попытался с LEFT JOIN, но не смог получить результат. И, поскольку итоговая таблица занимает около 10 тыс. Строк, я бы не использовал предложение IN.

Окончательный ожидаемый результат

id 2 и id 4 также находятся в таблице balance_second, поэтому я хочу перейти к таблице balance_first OVERWRITING balance_first;

id 10 отсутствует в таблице LEFT, поэтому мы добавляем его

Наконец, id 1 и 3 находятся только в balance_first, поэтому нам нужно оставить нетронутым в final_result

+----+---------+
| id | balance |
+----+---------+
|  1 |      12 |
|  2 |     7.5 |
|  3 |       0 |
|  4 |    2.33 |
| 10 |    1.23 |
+----+---------+

Это скрипта SQL: http://sqlfiddle.com/#!9/eabdfe/1

Ответы [ 2 ]

0 голосов
/ 15 мая 2018

У меня есть другая идея. Мы могли бы присоединиться ко 2-му столу с первым. Затем объедините 1-й стол со вторым. Объедините их обоих, чтобы получить результаты.

select id,balance
from ((select b2.id as 'id',b2.balance as 'balance'
from balance2 b2
LEFT JOIN balance b 
ON b2.id = b.id)
UNION
(select b.id as 'id',IF(b2.balance is null,b.balance,b2.balance) as 'balance'
from balance b 
LEFT JOIN balance2 b2
ON b.id = b2.id)) derived_table
order by id;
0 голосов
/ 15 мая 2018

Вы можете получить данные из balance2 и использовать UNION для добавления данных из balance, который недоступен в balance2.

SELECT ID, balance FROM balance2
UNION
SELECT b.ID, b.balance FROM balance b
LEFT JOIN balance2 b2 ON b2.ID = b.ID
WHERE b2.ID IS NULL
ORDER BY ID

Вывод:

| ID | balance |
|----|---------|
|  1 |      12 |
|  2 |     7.5 |
|  3 |       0 |
|  4 |    2.33 |
| 10 |    1.23 |

См. Это SQLFiddle

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...