Задать вопрос
wolverine777
@wolverine777

Как выбрать поля, в которых отсутствует искомое?

Не пойму, почему у меня не получается NOT LIKE когда я хочу выбрать поля в которых НЕ ПРИСУТСТВУЕТ ключевое слово.

Например (это такая учебная бд по звездным войнам), если я хочу выбрать все эпизоды в который ПРИСУТСТВУЕТ Йода - следующее работает отлично.

SELECT DISTINCT Episode
FROM PERSONNAGE as P, COMPOSER as C
WHERE P.CodePers = 'yoda'
AND P.CodePers = C.CodePers

А когда я хочу выбрать наоборот тот эпизод в котором Йоды нет - почему-то ничего не выходит

SELECT DISTINCT Episode
FROM PERSONNAGE as P, COMPOSER as C
WHERE P.CodePers NOT LIKE 'yoda'
AND P.CodePers = C.CodePers


В чем ошибка?
  • Вопрос задан
  • 67 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 3
@Nujabes37
:DEATH
'abc%'	Любые строки, которые начинаются с букв «abc»
'%z'	Любая последовательность символов, которая обязательно заканчивается символом «z»


WHERE P.CodePers NOT LIKE '%yoda%'
Ответ написан
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Ошибка в логике. Если в эпизоде есть хоть один персонаж, кроме Йоды, то условие NOT LIKE 'yoda' или != 'yoda' выполнится и эпизод будет выбран.
Ответ написан
@VitaliiVV
мимопроходил
я не уверен в формулировке, но можно попробовать без соединений с проверкой отсутсвия -
WHERE NOT EXISTS, или можно решить этот вопрос разницей таблиц (с помощью except)
(Возможны ошибки в синтаксисе, я бы сам поигрался с базой, если можно))

SELECT DISTINCT Episode
FROM PERSONNAGE as P, COMPOSER as C
WHERE NOT EXISTS
( SELECT DISTINCT Episode
FROM PERSONNAGE
WHERE CodePers = 'yoda')
AND P.CodePers = C.CodePers

SELECT DISTINCT Episode
FROM PERSONNAGE
EXCEPT
SELECT DISTINCT Episode
FROM PERSONNAGE as P, COMPOSER as C
WHERE P.CodePers = 'yoda'
AND P.CodePers = C.CodePers
Ответ написан
Ваш ответ на вопрос

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

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