объединить две таблицы с условием! = - PullRequest
0 голосов
/ 24 мая 2019

У меня есть две таблицы

  1. курсы_доступно:

    Course | language
    -----------------
     A     | English
     A     | Spanish
    
  2. courses_enrolled

    Name    |course | language
    --------------------------
    PersonA | A     | English
    PersonB | A     | Spanish
    PerconC | A     | French
    

Я хочу написать запрос, чтобы получить записи о том, что человек проходит курс на языке, на котором он не предлагается. В приведенном выше примере PersonC проходит курс A на французском языке, но он предлагается только на английском и испанском языках. .

select p.name, p.course, p.language from courses_available c, courses_enrolled p where p.course=c.course and p.language != c.language.

Приведенный выше запрос также дает мне курс А. Какой тип соединения даст мне только С?

Ответы [ 5 ]

0 голосов
/ 24 мая 2019

Вы не можете сделать это, присоединяясь там, где язык не соответствует, вы хотите присоединиться там, где он совпадает, но выбираете только те строки, где при левом соединении не найдено ни одного courses_available:

select p.name, p.course, p.language
from courses_enrolled p
left join courses_available c on p.course=c.course and p.language = c.language
where c.course is null
0 голосов
/ 24 мая 2019

Использование не существует

Select  enrolled.*
From enrolled
Where.not exists (
Select 1
From courses
Where courses.id = enrolled.id
And courses.language = enrolled.language
)
0 голосов
/ 24 мая 2019

Не нужно использовать '! =', Вы можете добавить еще одно on условие

select ce.* from course c inner join courses_enrolled ce 
on 
c.Course = ce.Course 
and 
c.Language = ce.Language

, которое вы можете увидеть в sqlFiddle

0 голосов
/ 24 мая 2019

использовать левое соединение с условием b.language is null

select p.name, p.course, p.language 
from courses_enrolled a left join courses_available b
on a.course=b.course and a.language = b.language
where b.language is null
0 голосов
/ 24 мая 2019

Надеюсь, это поможет. Просто используйте «<>» вместо! =

Пример:

SELECT * FROM courses_available 
LEFT JOIN courses_enrolled ON courses_available.course = courses_enrolled.course
WHERE courses_available.language <> courses_enrolled.language
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...