как выбрать только внешние транзакции (значения столбцов) в oracle? - PullRequest
0 голосов
/ 05 мая 2020

у меня есть первая таблица с id_client, id_card (информационная таблица) и вторая с id_debet, id_credit, value, vale_info (таблица транзакций)

      first table                    second table
______________________             ________________________________________________________
|id_client | id_card |            |id_debet  |id_credit | value | value info              |
|50102411  | 5166    |            | 5166     | 5167     | 300$  | transfer to client card |
|50102411  | 5167    |            | 5167     | 4931239  | 100$  | UBER taxi NY            |
|50102412  | 5168    |            | 5168     | 5169     | 200$  | transfer to client card |
|50102412  | 5169    |            | 5169     | 3582934  | 120$  | rent hotel room         |
______________________             ________________________________________________________

id_debet -> spend from your card
id_Debet -> replenishment to your card 
and i want to select only external tranzaction not between card clients
for ex 
if 5166 send money to 5167 i skip this tranzaction 
if 5166 send to another card i select it etc


Ответы [ 2 ]

1 голос
/ 05 мая 2020

Вы можете использовать запрос NOT EXISTS, чтобы найти все транзакции во второй таблице, которые имеют id_debet или id_credit, которого нет в первой таблице:

SELECT *
FROM table2 t2
WHERE NOT EXISTS (SELECT * 
                  FROM table1 t1
                  WHERE t1.id_card = t2.id_debet)
  OR NOT EXISTS (SELECT * 
                 FROM table1 t1
                 WHERE t1.id_card = t2.id_credit)

Вывод:

id_debet    id_credit   value   value info
5167        4931239     100$    UBER taxi NY
5169        3582934     120$    rent hotel room

Демонстрация на dbfiddle

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

Вы можете использовать GROUP BY и HAVING следующим образом:

SELECT T.id_debet, T.id_credit, T.value, T.value info FROM tranzaction T 
JOIN info I ON I.id_card IN (T.id_debet, T.id_credit)
GROUP BY T.id_debet, T.id_credit, T.value, T.value
HAVING COUNT(1) = 1
...