Объединение 4 таблиц вместе и проверка, где итоги не совпадают - PullRequest
0 голосов
/ 28 мая 2020

У меня есть 4 таблицы act, up, pos_act, pos_up В этом примере предположим, что у меня есть столбцы идентификатора клиента и количества как

act.cust_id, up.cust_id, act.amount, up.amount pos_up .cID, pos_act.cID, pos_up.amount_, pos_act.amount_

       act    

| cust_id | amount |
|:-------:|:------:|
|   6789  |  30.00 |
|   9876  |  25.00 |

       pos_act

|   cID   | amount_|
|:-------:|:------:|
|   6789  |  30.00 |
|   9876  |  24.99 |


----------------------------------------

        up

| cust_id | amount |
|:-------:|:------:|
|   1234  |  10.00 |
|   2345  |  75.00 |


        pos_up

|   cID   | amount_|
|:-------:|:------:|
|   1234  |   9.99 |
|   2345  |  75.00 |

Теперь С этим я хочу сравнить, где суммы не совпадают все в одной таблице.
Итак, в этом примере 2345 совпадений в действии 1234 не совпадает.

Тогда результаты должны быть

    All Unmatched  

| cust_id | Table  |
|:-------:|:------:|
|   9876  |  Act   |
|   1234  |  Up    |

Я пробовал с союзами, но, похоже, не могу заставить это работать

SELECT *
FROM (
    select cID, amount FROM  act as a
    union select cID, amount FROM up as b
) as v
LEFT JOIN 
(select CID, amount_ FROM pos_up as c
 UNION select CID, amount_ from pos_act as d
 ) as r
 WHERE a.amount != d.amount_

Я также пробовал с левыми соединениями, но он просто показывает мне все результаты. Мне нужны только несовпадающие. custid - это уникальный идентификатор, который может появляться несколько раз.

1 Ответ

0 голосов
/ 28 мая 2020

Вы просто используете UNION не в том месте

SELECT cID, amount, 'act' as `table`
FROM  act as a
LEFT JOIN pos_act as pa
ON a.cust_id = pa.
 WHERE a.amount != pa.amount_
UNION ALL
SELECT cID, amount, 'up'
FROM  up as u
LEFT JOIN pos_up as pu
ON u.cust_id = pu.cID
WHERE u.amount != pu.amount_
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...