уникальный пункт где - PullRequest
0 голосов
/ 11 марта 2020

Я пытался запустить этот код с oracle 11g, и постоянно возникает ошибка «ORA-00936: отсутствует выражение». Я думаю, что проблема в уникальном предложении, но я не знаю почему. какие-нибудь идеи, пожалуйста?

select id , name , dept_name , salary
from instructor 
where unique (select teaches.id
              from teaches 
              where instructor.id = teaches.id and year = 2009 );

Ответы [ 4 ]

0 голосов
/ 11 марта 2020

«Мне нужно попробовать это с уникальным предложением»

УНИКАЛЬНЫЙ не оператор. Что вы можете сделать, это:

select id , name , dept_name , salary
from instructor 
where instructor.id in  (select unique teaches.id
                         from teaches 
                         where   year = 2009 
                         group by teaches.id having count(*) = 1);

Тем не менее, УНИКАЛЬНЫЙ является избыточным, потому что это имеет тот же эффект:

select id , name , dept_name , salary
from instructor 
where instructor.id in  (select teaches.id
                         from teaches 
                         where   year = 2009 
                         group by teaches.id having count(*) = 1 );

Если вы не удовлетворены ответами мы дали вам возможность опубликовать ссылку или цитату из учебника. Потому что кажется, что вы пытаетесь сделать что-то, что не поддерживает синтаксис Oracle SQL.

0 голосов
/ 11 марта 2020

Я думаю, что вы хотите

        select distinct id , name , dept_name , salary

И вы, где должно быть "In" утверждение, что

0 голосов
/ 11 марта 2020

Объяснение того, что вы хотите сделать, а также примеры данных, безусловно, помогут; все, что мы знаем, это то, что вы написали запрос, который является недействительным.

Между тем, еще одно счастливое предположение:

select i.id, i.name, i.dept_name, i.salary
from instructor i join teaches t on t.id = i.id
where t.year = 2009
0 голосов
/ 11 марта 2020

Предположительно, вы хотите, чтобы инструкторы обучались только один раз в 2009 году.

Если это так, вы могли бы сделать:

select id, name, dept_name, salary
from instructor i
where (select count(*) from teaches t where i.id = t.instructor_id and t.year = 2009) = 1;

Я бы ожидал, что таблица teaches имеет instructor_id столбец вместо id, относящийся к instructor(id).

Другой вариант использует агрегирование:

select i.id, i.name, i.dept_name, i.salary
from instructor i
inner join teaches t on t.instructor_id = i.id and t.year = 2009
group by i.id, i.name, i.dept_name, i.salary
having count(*) = 1
...