Есть несколько способов сделать это, один из них - выполнить FULL OUTER JOIN
, а затем GROUP BY COALESCE( t1.COLOUR, t2.COLOUR )
и подсчитать, есть ли какие-либо значения NULL
по обе стороны от соединения;если есть, то есть несопоставленное значение (при условии, что ни одно из входных значений не равно NULL
:
Настройка Oracle :
CREATE TABLE t1 ( colour, valuesy ) as
SELECT 'RED', '1' FROM DUAL UNION
SELECT 'RED', '2' FROM DUAL UNION
SELECT 'BLUE', '1' FROM DUAL UNION
SELECT 'BLUE', '2' FROM DUAL
CREATE TABLE t2 ( colour, valuesy ) as
SELECT 'RED', '1' FROM DUAL UNION
SELECT 'RED', '3' FROM DUAL UNION
SELECT 'BLUE', '1' FROM DUAL UNION
SELECT 'BLUE', '2' FROM DUAL
Запрос:
SELECT COALESCE( t1.COLOUR, t2.COLOUR ) AS COLOUR
FROM t1
FULL OUTER JOIN t2
ON t2.VALUESY = t1.VALUESY AND t2.COLOUR = t1.COLOUR
GROUP BY COALESCE( t1.COLOUR, t2.COLOUR )
HAVING COUNT( CASE WHEN t1.COLOUR IS NULL OR t2.COLOUR IS NULL THEN 1 END ) = 0
Выход :
| COLOUR |
| :----- |
| BLUE |
db <> Fiddle здесь