我的表格如下:
user key
x 1
x 2
y 1
z 1
问题很简单。如何找出哪个是没有密钥2的用户? 结果应该是y和z用户。
答案 0 :(得分:3)
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