2013-11-08 4 views
0

Следующий код, похоже, не распознает код в скобках, который после инструкции NOT EXISTS.SQL NOT EXISTS не работает

select * 
from department 
where 
NOT EXISTS 
(select * 
from department  
where UPPER(state) != 'VIC'); 

Я проводил часы на этом и не могу заставить его работать (можно сделать, используя другой запрос, но не один выше).

+6

Какой результат? Почему бы не просто «выбрать» из отдела, где UPPER (state)! = «VIC»? – Blorgbeard

ответ

1

Это не работает, потому что у вас есть хотя бы одна строка в таблице department, где UPPER(state) != 'VIC' - это правда.

Работа это в вашей голове, сначала необходимо выполнить подзапрос:

SELECT * 
FROM department 
WHERE UPPER(state) != 'VIC' 

Если это возвращает ничего, то ваш внешний запрос выглядит следующим образом, эффективно:

SELECT * 
FROM department 
WHERE NOT TRUE; 

Что означает его ничего не вернет.

Теперь мой последующий вопрос: что вы хотите сделать?

Я подозреваю, что нет оснований использовать подзапрос. Я хотел бы предложить это в качестве возможной альтернативы:

SELECT * 
FROM department 
WHERE UPPER(state) = 'VIC' 

Но так как я не знаю, что конечный результат вы на самом деле хотите, я не знаю, если это уместно.

+0

HI Flimzy, мне нужно использовать НЕ EXSISTS - я мог заставить его работать так, как вы предлагаете. Я пытаюсь отобразить все строки, содержащие «VIC». – user2967555

+0

Почему, по-вашему, вам нужно использовать NOT EXISTS? Если все, что вам нужно, это строки, содержащие VIC, почему бы просто не поискать это? 'WHERE UPPER (state) = 'VIC''. – Flimzy

+0

для uni так нужно продемонстрировать, что я могу использовать его, но не могу заставить его работать вообще. – user2967555

0

Зачем использовать 2 запроса? Вместо этого вы можете попробовать

select * from department where UPPER(state) <> 'VIC'