SQL подзапросов не возвращает ожидаемый результат - PullRequest
0 голосов
/ 18 февраля 2020
Select name 
from instructor 
where dept_name = 'Comp. Sci.' and ID in
    (select ID
     from course 
     where title != 'Intro. to Computer Science')

С этим входом я хочу, чтобы на выходе были инструкторы, которые никогда не учили "Введение в информатику", но на выходе - все преподаватели из CS, а не только 1 профессор Брант, который не преподавал введение в информатику. Что я делаю не так?

instructor

course

teaches

Ответы [ 2 ]

1 голос
/ 18 февраля 2020

это должно работать для вас

select i.name 
from instructor as i, teaches as t
where i.dept_name = 'Comp. Sci.' and i.ID=t.ID
and not exists (
  select 1 
  from course 
  where t.ID = course.course_id and title = 'Intro. to Computer Science'
)
0 голосов
/ 18 февраля 2020

Используйте NOT EXISTS:

select i.name 
from instructor i
where i.dept_name = 'Comp. Sci.' 
and not exists (
  select 1 
  from teaches t inner join course c
  on c.course_id = t.course_id 
  where t.id = i.id and c.title = 'Intro. to Computer Science'
)

или сгруппируйте по инструктору и задайте условие в предложении HAVING:

select i.name 
from instructor i
inner join teaches t on t.id = i.id
inner join course c on c.course_id = t.course_id 
where i.dept_name = 'Comp. Sci.'
group by i.id, i.name
having count(case when c.title = 'Intro. to Computer Science' then 1 end) = 0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...