Напишите запрос, чтобы определить все X1, X2 так, чтобы X1 и X2 имели разные значения для D - PullRequest
1 голос
/ 17 апреля 2020

Первая таблица (X) имеет столбцы X1 и X2. Вторая таблица (Y) имеет столбцы X и D. Оба X1 и X2 имеют ограничение внешнего ключа, относящееся к столбцу X в таблице Y. Напишите запрос, чтобы определить все X1, X2 так, чтобы X1 и X2 имели разные значения для D.


Я пробовал следующие

SELECT x.*, y1.d, y2.d 
FROM x 
INNER JOIN y  y1 ON x.x1 = y1.X
INNER JOIN y  y2 ON x.x2 = y2.X 
WHERE y1.d <> y2.d;

данные таблицы образцов для X и Y

Ответы [ 2 ]

0 голосов
/ 18 апреля 2020

Почему вы не используете оператор CASE-WHEN?

(case when table1.x1 = d or table1.x2 = table2.d then 'No difference' 
 else 'Different value' END)
0 голосов
/ 18 апреля 2020

Вы можете использовать коррелированные подзапросы, чтобы найти значения 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 здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...