Как найти несоответствие между двумя таблицами относительно каждой таблицы в SQL? - PullRequest
1 голос
/ 18 февраля 2020

У меня есть таблица TAB_1, TAB_2, в которой хранится набор некоторых детей со схемой

KID_ID (Number(2))  SHIRT_COLOR(VARCHAR (10)) PANT_COLOR(VARCHAR (10)) .

TAB_1 содержит сведения о 50 детях, в то время как TAB_2 содержит 60 записей. Если у нас есть 45 общих детей между TAB_1 и TAB_2, которые имеют одинаковые KID_ID, SHIRT_COLOR и PANT_COLOR, то мы должны выяснить Несоответствия между таблицами TAB_1 и TAB_2 по TAB_1 & TAB_2.

Поскольку 45 детей являются общими, так что в TAB_1 есть 5 несоответствий детей и 15 несоответствий детей в TAB_2. Теперь нам нужно проверить, имеют ли 5 ​​дополнительных детей в TAB_1 какие-либо атрибуты, общие с таблицей TAB_2, то есть, например, если из 5 детей, Есть 3 ребенка, чьи рубашки соответствуют таблице TAB_2 Table, 2 ребенка, чьи цвета брюк соответствуют цвету детей таблицы TAB_2, поэтому в таблице TAB_1 есть только 1 ребенок, а в таблице TAB_1 - 11 детей. в Tab_2.

Подскажите пожалуйста, как к этому подойти?

1 Ответ

1 голос
/ 18 февраля 2020

Мы можем попытаться использовать полное внешнее объединение здесь, а затем сохранить только записи из каждой таблицы, которые не пересекаются между двумя таблицами:

SELECT
    COALESCE(t1.SHIRT_COLOR, t2.SHIRT_COLOR) AS SHIRT_COLOR,
    COALESCE(t1.PANT_COLOR, t2.PANT_COLOR) AS PANT_COLOR,
    CASE WHEN t2.KID_ID IS NULL THEN 'TAB_1' ELSE 'TAB_2' END AS TABLE_SOURCE
FROM TAB_1 t1
FULL OUTER JOIN TAB_2 t2
    ON t1.SHIRT_COLOR = t2.SHIRT_COLOR AND
       t1.PANT_COLOR = t2.PANT_COLOR
WHERE
    t1.KID_ID IS NULL OR
    t2.KID_ID IS NULL;

Перейдите по ссылке ниже, чтобы увидеть работающую демонстрацию в Oracle.

Демо

...