как использовать оператор «не в» в oracle cmd?

#sql #oracle

Вопрос:

Я использую этот код:

 create or replace view VIEW_MAXMIN as select c.country_name,  max(salary) max_salary,  min(salary) min_salary from employees e,  departments d,  locations l,  countries c where e.department_id = d.department_id and d.location_id = l.location_id and l.country_id = c.country_id = not in(select country_name  from countries  where country_name = 'Mexico');  

но всегда ошибка, говорящая «команда SQL не завершена должным образом»

Комментарии:

1. Удалите»=», прежде чем НЕ ВХОДИТЬ. Но я не уверен, что это ваша главная проблема.

2. я уже удаляю»=», но это та же ошибка

3. Когда вы удалили =, вы добавили and ?

Ответ №1:

Вы можете изменить соединения с устаревших соединений Oracle через запятую на соединения ANSI, и тогда, похоже, вам нужны страны, в которых этого имени нет Mexico .

Кроме того, если вы агрегируете столбцы и у вас есть столбец, который вы не агрегируете, вам необходимо использовать GROUP BY :

 create or replace view VIEW_MAXMIN as select c.country_name,  max(salary) max_salary,  min(salary) min_salary from employees e  INNER JOIN departments d  ON (e.department_id = d.department_id)  INNER JOIN locations l  ON (d.location_id = l.location_id)  INNER JOIN countries c  ON (l.country_id = c.country_id) where c.country_name != 'Mexico' GROUP BY c.country_name;  

Ответ №2:

Похоже, что ошибка, которую вы получаете, в частности, связана с —

 l.country_id = c.country_id = not in(select country_name  from countries  where country_name = 'Mexico');  

У вас есть 2 равных условия в одном операторе фильтра — например, a = b = c Просто — l.country_id = c.country_id было бы достаточно и country_name != 'Mexico' должно быть отдельное условие