Mysql Query для отображения несоответствующих записей из обеих таблиц, таких как старая запись и новая запись - PullRequest
0 голосов
/ 06 февраля 2019

У меня есть две две таблицы, одна временная таблица, а другая главная таблица. Перед выполнением финального процесса пользователь нажимает кнопку обновления.Затем я заполняю данные во временную таблицу, и мне нужно отобразить ее пользователю, если есть какая-либо разница между двумя таблицами, например старое значение - новое значение.Для этого я попытался запрос ниже, но не смог получить старое значение.Я получаю как ноль

Temporay table

+------+--------------+----------------+-----+
| asn        |       ean |   belegnr |quantity|
+------+--------------+----------------+-----+
|  700000845 | 4046228201122| 30059314 |2  |
|  700000845 | 4046228138879| 30059314 |3  |
|  700000845 | 4046228138875| 30059320 |25 |
+------+--------------+----------------+--+--+

Основная таблица

+------+--------------+----------------+-----+
| asn        |       ean |   belegnr |quantity|
+------+--------------+----------------+-----+
|  700000845 | 4046228201122| 30059314 |5  |
|  700000845 | 4046228138879| 30059314 |3  |
|  700000845 | 4046228138888| 30059320 |25 |
+------+--------------+----------------+--+--+

Из обеих таблиц у меня есть изменения в поле EAN и в поле количества. Для этого я использую этот запрос

SELECT
t2.id,t2.ean,t2.belegnr,t2.`quantity`,t1.`quantity`  FROM
temp_table  t2
LEFT OUTER JOIN details  t1 ON
t1.asn = t2.asn
AND t1.ean = t2.ean
AND t1.belegnr =  t2.belegnr
AND t1.quantity = t2.quantity
WHERE t2.asn = 700000845
AND t2.`belegnr` in(30059314,30059320)
AND t1.id IS NULL

Ниже приведен мой ожидаемый результат

+------+--------------+----------------+-----+---------------------- 
| asn        |       ean |    oldean|       belegnr |quantity|Oldqty|
+------+--------------+----------------+-----+----------------------|
|  700000845 | 4046228201122| 4046228201122 |30059314 |2  |   5     |
|  700000845 | 4046228138875| 4046228138888 |30059320 |25  |  25    |
+------+--------------+----------------+--+--+--------+-------------+

Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

0 голосов
/ 06 февраля 2019

Не ответ.Слишком долго для комментария ...

Обратите внимание, что если бы набор данных был следующим, проблему было бы не менее трудно понять ...

Временная таблица

+-----+-----+-----------+-------+
| asn | ean  |   belegnr |quantity|
+-----+-----+------------+-----+
|  845 | 1122|      14 |     2  |
|  845 | 8879|      14 |     3  |
|  845 | 8875|      20 |    25 |
+-----+------+-----------+-------+
0 голосов
/ 06 февраля 2019

Как только вы ПРИСОЕДИНЯЕТЕСЬ, вы удалили строки t1, которые вы хотите назвать «старыми».

Предполагая, что asn является постоянным:

SELECT
t2.asn,t2.ean,t1.ean as oldean,t2.belegnr,t1.belegnr as oldbelegnr, t2.`quantity`,t1.`quantity` as Oldqty
FROM temp_table  t2
JOIN details  t1 ON t1.asn = t2.asn
WHERE
t1.ean <> t2.ean
OR t1.belegnr <>  t2.belegnr
OR t1.quantity <> t2.quantity
...