我有两个桌子
可用的课程:
Course | language
-----------------
A | English
A | Spanish
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.
上述查询也为我提供了课程A。什么样的加入只会给我C?
答案 0 :(得分:0)
我希望能有所帮助。只需使用“ <>”代替!=
示例:
SELECT * FROM courses_available
LEFT JOIN courses_enrolled ON courses_available.course = courses_enrolled.course
WHERE courses_available.language <> courses_enrolled.language
答案 1 :(得分:0)
无需使用'!=',您可以再添加一个on
条件
select ce.* from course c inner join courses_enrolled ce
on
c.Course = ce.Course
and
c.Language = ce.Language
您可以在sqlFiddle
中看到答案 2 :(得分:0)
在条件为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
答案 3 :(得分:0)
不存在使用
Select enrolled.*
From enrolled
Where.not exists (
Select 1
From courses
Where courses.id = enrolled.id
And courses.language = enrolled.language
)
答案 4 :(得分:0)
您不能通过在语言不匹配的地方连接来执行此操作,您想要在语言匹配的地方进行连接,而只能选择在没有左连接的情况下找不到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