PostgreSQL选择

时间:2016-04-29 09:28:12

标签: sql postgresql

我的表格如下:

user  key
x     1
x     2
y     1
z     1

问题很简单。如何找出哪个是没有密钥2的用户? 结果应该是y和z用户。

3 个答案:

答案 0 :(得分:3)

如果你有 两个 表,那么@ jarlh的答案可能是最快的;
- 一个与用户
- 一个有你的事实

select "users"."user_id"
from "users"
where not exists (select 1 from tablename t2
                   where t2."user_id" = "users"."user_id"
                     and t2."key" = 2)

这也是我推荐的结构,有两张桌子。

对于您的情况,您只有一张桌子,以下可能是更快的选择;它不需要加入或运行相关的子查询,而只需扫描整个表一次。

SELECT
    "user"
FROM
    tablename
GROUP BY
    "user"
HAVING
    MAX(CASE WHEN "key" = 2 THEN 1 ELSE 0 END) = 0

答案 1 :(得分:2)

只要同一用户没有另一行密钥2,就返回用户行。

select user, key
from tablename t1
where not exists (select 1 from tablename t2
                  where t2.user = t1.user
                    and t2.key = 2)

请注意,user是ANSI SQL中的保留字,因此您可能需要将其分隔为"user"

答案 2 :(得分:1)

试试这个;

SELECT "user", "key"
FROM Your_Table AS T1
LEFT OUTER JOIN Your_Table AS T2 ON T1."user" = T2."user" AND T2."key" = 2
WHERE T2."user" IS NULL