当其他行具有值时,Postgres不返回任何内容

时间:2012-10-24 15:35:19

标签: postgresql

我正在尝试进行查询,在数据库中有多个组中的多个组,但如果其中一行符合某个条件,我希望查询不返回任何内容。

我尝试使用CASE,但似乎没有像这样的工作

select *, 
    CASE WHEN groupname = 'is_%' and groupname != 'is_banned' THEN false END 
from usersgroups 
WHERE username = 'tu1';

不确定该怎么做。

由于

编辑:

这是我拥有数据库atm的方式

username|usergroup
tu1     |is_user
tu1     |is_banned
tu2     |is_user

所以我想要的是查询只返回值,如果用户是任何is_组的一部分并且他们不是is_banned,但问题是他们在不同的行

再次感谢

1 个答案:

答案 0 :(得分:2)

select *
from usersgroups 
WHERE
    username = 'tu1'
    and exists (
        select 1
        from usersgroups
        where
            username = 'tu1'
            and groupname like 'is_%'
    )
    and not exists (
        select 1
        from usersgroups
        where
            username = 'tu1'
            and groupname = 'is_banned'
    )