Postgresql - 从表中选择一行,其中许多表中的值匹配?

时间:2013-07-12 16:24:04

标签: postgresql

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

为简化示例,假设我有一个表部门和相关表员工,每个员工都有一个部门,但每个部门显然可以有多个员工。我想要一个查询,每个部门会给我一行,其中一个或多个员工符合给定的标准 - 比如说有一个或多个员工的部门已经赢得了“本月员工”。我该怎么做?感谢。

3 个答案:

答案 0 :(得分: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'
   );

答案 1 :(得分:1)

听起来像子查询的工作。类似于:从*中选择*,其中id为(从Emp中选择deptID,其中wasEOTM = true);应该做的工作。

答案 2 :(得分: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