lintcode-1939 · 简历投递 I

442 阅读2分钟

描述

students 表存储了所有学生的信息,包括学生 id 和学生姓名 name
companies 表存储了所有公司的信息,包括公司 id 和公司名称 name
recording 表存储了所有的简历投递数据,包括学生 id (student_id) 和 公司 id (company_id)
请编写 SQL 语句,查询所有没有向阿里巴巴 (Alibaba) 公司投递过简历的学生姓名。

表定义 1: students (学生表)

列名类型注释
idint unsigned主键
namevarchar学生姓名

表定义 2: companies (公司表)

列名类型注释
idint unsigned主键
namevarchar公司名称
addressvarchar公司地址

表定义 3: recording (记录表)

列名类型注释
idint unsigned主键
delivery_datedate投递日期
company_idint公司 id
student_idint学生 id

样例

样例一:

表内容 1: students

idname
1Da Ming
2Amy
3Mike
4Park
5George

表内容 2: companies

idnameaddress
1AlibabaHang Zhou
2NetEaseGuang Zhou
3BaiduBei Jing
4TencentShen Zhen

表内容 3: recording

iddelivery_datecompany_idstudent_id
12020-01-0834
22020-02-0645
32020-03-1211
42020-04-0714

在运行你的 SQL 语句之后,表应返回:

name
Amy
Mike
George

样例二:

表内容 1: students

idname
1Da Ming
2Amy
3Mike
4Park
5George

表内容 2: companies

idnameaddress
1AlibabaHang Zhou
2NetEaseGuang Zhou
3BaiduBei Jing
4TencentShen Zhen

表内容 3: recording

iddelivery_datecompany_idstudent_id
12020-01-0812
22020-02-0615
32020-03-1211
42020-04-0714

在运行你的 SQL 语句之后,表应返回:

name
Mike

题解

第一步:left join companies c on r.company_id=c.id where c.name='Alibaba' 左连接company,查出名称为alibaba的公司id, 第二步:根据上面查到的id 找到所有投递的学生 第三步:根据找到的学生的,反选出没有投递的学生。

select
name 
from students  
where name not in (
    select
    s.name
    from students s 
    left join recording  r 
    on s.id=r.student_id
    left join companies c 
    on r.company_id=c.id
    where c.name='Alibaba'
)