Вы можете использовать коррелированные подзапросы, чтобы найти значения D
:
SELECT *
FROM X
WHERE ( SELECT d FROM y WHERE y.x = x.x1 )
<> ( SELECT d FROM y WHERE y.x = x.x2 );
Итак, если ваши данные:
CREATE TABLE X ( X1, X2 ) AS
SELECT 1, 1 FROM DUAL UNION ALL
SELECT 2, 3 FROM DUAL UNION ALL
SELECT 1, 4 FROM DUAL UNION ALL
SELECT 1, 5 FROM DUAL;
CREATE TABLE Y ( x, d ) AS
SELECT 1, 1 FROM DUAL UNION ALL
SELECT 2, 2 FROM DUAL UNION ALL
SELECT 3, 3 FROM DUAL UNION ALL
SELECT 4, 4 FROM DUAL UNION ALL
SELECT 5, 1 FROM DUAL;
Это выводит:
X1 | X2
-: | -:
2 | 3
1 | 4
дБ <> fiddle здесь
Ваш запрос тоже работает; однако ваши тестовые данные не работают, поскольку у вас всегда есть идентичные значения для значения Y.D
для X.X1
и X.X2
, поэтому предложение WHERE
исключит каждую строку. Если вы используете разные значения, то это работает.
db <> fiddle здесь