#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'
должно быть отдельное условие