在两个表之间加入!=条件

时间:2019-05-24 03:32:06

标签: mysql sql

我有两个桌子

  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.

上述查询也为我提供了课程A。什么样的加入只会给我C?

5 个答案:

答案 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