我的Postgresql TABLE看起来像

CREATE TABLE foo(man_id, subgroup, power, grp)
AS VALUES
    (1, 'Sub_A',  4, 'Group_A'),
    (2, 'Sub_B', -1, 'Group_A'),
    (3, 'Sub_A',  5, 'Group_A'),
    (4, 'Sub_B',  1, 'Group_A'),
    (5, 'Sub_B',  6, 'Group_B'),
    (6, 'Sub_B',  2, 'Group_B'),
    (7, 'Sub_C',  2, 'Group_B');
    (8, 'Sub_B',  2, 'Group_C');


我们有四列man_idsubgrouppowergrp。我想获取一个subgroup仅存在于一个grp中的记录。在这里,您只能在Sub_A subgroup中找到Group_A grp。所以,我的预期结果应该是

1, Sub_A,  4, Group_A
3, Sub_A,  5, Group_A


推荐的实现方法是什么?

MySQL解决方案也是可以预期的。

最佳答案

我认为您可以使用not exists

select f.*
from foo f
where not exists (select 1
                  from foo f2
                  where f2.subgroup = f.subgroup and
                        f2.grp <> f.grp
                 );

08-17 22:55