0

我有两个表,分别称为 a 和 b,其中 a 与 b 以一对多的关系相关。我想从表 a 中选择任何行,其中表 b 中的许多相关记录中的任何一个都与条件匹配。基本连接不起作用,因为这将为表 b 中匹配的每一行返回一个结果 - 我只希望表 a 中的每一行都有一个结果,并且有一个或多个相关记录匹配。

举个简单的例子,假设我有一个表 Departments 和相关表Employees,其中每个员工都有一个部门,但每个部门显然可以有多个员工。我想要一个查询,每个部门有一个或多个员工符合给定条件的一行 - 比如说有一个或多个员工获得“本月最佳员工”的部门。我该怎么做?谢谢。

4

3 回答 3

2
SELECT * FROM department d
WHERE EXISTS (
   SELECT * FROM employee e
   JOIN badges b ON b.person_id = e.person_id AND b.badge = 'EotM'
   WHERE e.dep_id = d.dep_id
   AND e.gender = 'F'
   );
于 2013-07-12T16:40:53.167 回答
1

听起来像是子查询的工作。类似于: Select * from dept where id in (select deptID from Emp where wasEOTM = true); 应该做的工作。

于 2013-07-12T16:37:01.320 回答
1
select distinct on (d.id)
    d.name
from
    department d
    inner join
    employee e on d.id = e.department_id
where e.age between 60 and 65

如何按任何列排序:

select *
from (
    select distinct on (d.id)
        d.*
    from
        department d
        inner join
        employee e on d.id = e.department_id
    where e.age between 60 and 65
) s
order by name
于 2013-07-12T17:21:55.510 回答