首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL:左加入排斥

MySQL:左加入排斥
EN

Stack Overflow用户
提问于 2015-03-28 20:39:30
回答 2查看 84关注 0票数 0

我正在努力处理一个MySQL请求,我似乎找不到正确的语法。我的数据库的设计非常简单:我有一个表申请者,一个表实习和一个表应用程序。当申请者申请实习时,我在应用程序表中插入一行,其中包含连接申请者和实习人员的两个外键。

问题:知道申请人的身份,我如何才能得到申请人尚未申请的所有实习职位的清单?

到目前为止:我想出了这个查询,但不是这样的:

代码语言:javascript
复制
SELECT internship.* FROM internship LEFT JOIN application
ON application.id_internship = internship.id_internship
WHERE application.id_applicant IS NULL OR application.id_applicant <> 42
GROUP BY application.id_internship

任何帮助都将不胜感激。祝你今天愉快。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-03-28 20:47:38

您应该在join中使用申请者id的条件,并使用=操作符,这样连接的记录就是连接到申请者的记录,然后筛选出与join匹配的实习职位:

代码语言:javascript
复制
SELECT
  internship.*
FROM
  internship
  LEFT JOIN application ON application.id_internship = internship.id_internship AND application.id_applicant = 42
WHERE
  application.id_applicant IS NULL

没有必要将查询分组,因为每次实习只在结果中进行一次。

票数 1
EN

Stack Overflow用户

发布于 2015-03-28 20:43:33

您可以使用EXISTS运算符进行操作,而不需要联接,如下所示:

代码语言:javascript
复制
SELECT *
FROM internship i
WHERE NOT EXISTS (
    SELECT *
    FROM application a
    WHERE i.id_internship = i.id_internship AND application.id_applicant = 42
)

这个查询是不言自明的:只有申请id of 42的申请人没有申请的实习才会被选中。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29322344

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档