@nedland123

SQL запрос для выбора несовпадения?

Есть таблица QEEN
ID A B
1 22 32
2 22 55
3 32 22
4 32 77

Как запросом SELECT выбрать только ID=2 и ID=4, то есть выбрать ID где нет совпадений в А и Б и наоборот Б и А у разных строк.
  • Вопрос задан
  • 219 просмотров
Решения вопроса 1
rozhnev
@rozhnev Куратор тега SQL
Fullstack programmer, DBA, медленно, дорого
-- Используя WHERE NOT EXISTS
SELECT * 
FROM QEEN
WHERE NOT EXISTS (
	SELECT ID FROM QEEN REVERSE_QEEN WHERE REVERSE_QEEN.A = QEEN.B AND REVERSE_QEEN.B = QEEN.A
);

-- Используя LEFT JOIN
SELECT QEEN.* 
FROM QEEN
LEFT JOIN QEEN REVERSE_QEEN ON REVERSE_QEEN.A = QEEN.B AND REVERSE_QEEN.B = QEEN.A
WHERE REVERSE_QEEN.ID IS NULL;

-- Просто извращение, но тоже должно работать :)
WITH ALL_QEEN AS (
	SELECT ID, A, B, 1 T FROM QEEN
  	UNION ALL
  	SELECT ID, B, A, 2 T FROM QEEN
) SELECT 
	MIN(ID) ID, A, B
FROM ALL_QEEN
GROUP BY A, B
HAVING COUNT(*) = 1 AND MIN(T) = 1;


Test SQL queries online
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
LEFT JOIN и IS NULL
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы