Sql 四个表显示最外层表的单个引用

Sql 四个表显示最外层表的单个引用,sql,postgresql,join,Sql,Postgresql,Join,我有一套表格如下: SELECT applicants.id, companies.name, employees.first_name, departments.name, applied_date FROM applicants INNER JOIN departments ON applicants.department_id = departments.id INNER JOIN companies ON departments.university_id = c

我有一套表格如下:

SELECT applicants.id, companies.name, employees.first_name, departments.name, applied_date FROM applicants INNER JOIN departments ON applicants.department_id = departments.id INNER JOIN companies ON departments.university_id = companies.id INNER JOIN employees ON applicants.student_id = employees.id 选择申请人.id、公司.name、员工.first\u name、部门.name、申请日期 来自申请人 内部加入申请者的部门。部门\部门id=部门id 在departments.university\u id=companys.id上内部加入公司 内部加入申请者的员工。学生\ id=员工。id 这会产生如下结果:

1 Apple Chuck hr 2013-09-24 2 Apple Chuck finance 2013-09-25 3 Apple Chuck outside sales 2013-09-25 4 Google Chuck outside sales 2015-10-25 7 Google Dottie product 2015-10-26 6 Apple Dottie product 2015-10-26 5 Apple Dottie sales 2015-10-25 8 Apple Blake product 2015-10-26 9 Google Blake product 2015-10-26 1苹果Chuck hr 2013-09-24 2苹果Chuck finance 2013-09-25 3苹果夹头外部销售2013-09-25 4谷歌Chuck外部销售2015年10月25日 7谷歌Dottie产品2015-10-26 6苹果Dottie产品2015-10-26 5苹果Dottie销量2015-10-25 8苹果Blake产品2015-10-26 9谷歌布莱克产品2015-10-26 我想做的是,为每个人向每个公司显示第一个申请日期

导致:

1 Apple Chuck hr 2013-09-24 4 Google Chuck outside sales 2015-10-25 7 Google Dottie product 2015-10-26 6 Apple Dottie product 2015-10-26 8 Apple Blake product 2015-10-26 9 Google Blake product 2015-10-26 1苹果Chuck hr 2013-09-24 4谷歌Chuck外部销售2015年10月25日 7谷歌Dottie产品2015-10-26 6苹果Dottie产品2015-10-26 8苹果Blake产品2015-10-26 9谷歌布莱克产品2015-10-26 我试着从公司走到申请者,反之亦然。此外,我尝试了一些左加入的,但没有任何效果


我觉得这对一些人来说一定很琐碎。。。任何方向都很好

在Postgres中,您可以在上使用
distinct:

SELECT DISTINCT ON (c.name, e.first_name), a.id, c.name, e.first_name, d.name, applied_date
FROM applicants a INNER JOIN
     departments d
     ON a.department_id = d.id INNER JOIN
     companies c
     ON d.university_id = c.id INNER JOIN
     employees e
     ON a.student_id = e.id
ORDER BY c.name, e.first_name, applied_date desc;

DISTINCT ON
是Postgres的一个特色。根据括号中键的值(也应该是按
排序的
中的第一个键)的定义,每组取一行。然后,它根据
顺序中的剩余键选择组中的第一行,因此这将为
名称
/
首名
组合选择最近的日期。

在Postgres中,您可以使用
distinct on

SELECT DISTINCT ON (c.name, e.first_name), a.id, c.name, e.first_name, d.name, applied_date
FROM applicants a INNER JOIN
     departments d
     ON a.department_id = d.id INNER JOIN
     companies c
     ON d.university_id = c.id INNER JOIN
     employees e
     ON a.student_id = e.id
ORDER BY c.name, e.first_name, applied_date desc;

DISTINCT ON
是Postgres的一个特色。根据括号中键的值(也应该是按
排序的
中的第一个键)的定义,每组取一行。然后,它根据
ORDER BY
中的剩余键选择组中的第一行,因此这将为
名称
/
第一个名称
组合选择最近的日期。

您可以使用标准SQL的PostgreSQL扩展,
上进行区分:

SELECT DISTINCT ON(companies.name, employees.first_name) 
   applicants.id, companies.name, employees.first_name, departments.name, applied_date
FROM applicants
INNER JOIN departments ON applicants.department_id = departments.id
INNER JOIN companies ON departments.university_id = companies.id
INNER JOIN employees ON applicants.student_id = employees.id
ORDER BY companies.name, employees.first_name, applied_date

您可以使用标准SQL的PostgreSQL扩展,在
上进行区分:

SELECT DISTINCT ON(companies.name, employees.first_name) 
   applicants.id, companies.name, employees.first_name, departments.name, applied_date
FROM applicants
INNER JOIN departments ON applicants.department_id = departments.id
INNER JOIN companies ON departments.university_id = companies.id
INNER JOIN employees ON applicants.student_id = employees.id
ORDER BY companies.name, employees.first_name, applied_date

它在PostgreSQL中很普通,但在MySQL中不常见,那么你们的DBMS是什么呢?我在使用Postgressql。它在PostgreSQL中很普通,但在MySQL中不常见,所以你们的DBMS是什么呢?我在使用Postgressql。谢谢各位,我感觉我遗漏了什么。奇怪的是,如果查询是在另一个RDM中运行的,那么解决方案会涉及左连接吗?@joenotjoe:left joins在这种情况下没有帮助,标准的SQL解决方案适用于
行数
。谢谢大家,我感觉我错过了一些东西。奇怪的是,如果查询是在另一个RDM中运行的,那么解决方案会涉及左连接吗?@joenotjoe:left joins在这种情况下没有帮助,标准的SQL解决方案适用于
行数