Postgresql 将不在子查询中的查询作为具有枚举值的条件

Postgresql 将不在子查询中的查询作为具有枚举值的条件,postgresql,Postgresql,我有一个名为users 用户标识状态转换 1. accept v1 1. refused v1 2. accept v1 2. refused v2 在表用户中没有主键,并且状态和转换 我必须获得一个不同的用户id,其中transition!='v2' 我想要的结果 user\u id 1 select T.user_id from users T wher

我有一个名为
users

用户标识
状态
转换

  1.       accept   v1
  1.       refused  v1
  2.       accept   v1
  2.       refused  v2
在表
用户
中没有主键
,并且
状态
转换

我必须获得一个
不同的用户id,其中transition!='v2'

我想要的结果

user\u id

   1
select  T.user_id from users T 
                         where  T.user_id not 
          in  
(select 1  from users where transition='v2' and users.ad_id=T.user_id 
                                           group by user_id) limit 10;
由于
user_id=2
具有
transition=v2

我进行了此查询,但不起作用,或者至少给了我重复的
user\u id

   1
select  T.user_id from users T 
                         where  T.user_id not 
          in  
(select 1  from users where transition='v2' and users.ad_id=T.user_id 
                                           group by user_id) limit 10;

您的查询必须如下所示:

select distinct user_id from users where transition != 'v2';
为了限制结果,只需在查询末尾添加
限制10


使用purpose exclude用户,该用户在具有不同转换版本的表中出现两次-请尝试以下操作:

select distinct user_id from users where user_id not in (
  select user_id from users where transition = 'v2'
);

我已经aleardy做了这个查询,但是没有为我想要的结果工作,因为您的查询将返回我的
user_id=2
,我没有返回,因为我有
transition=v2
我用结果更新了问题,希望更清楚谢谢您的合作感谢@Vladimir Kovpak它正在工作,但是运行时查询很慢,因为有其他方法处理大量数据吗优化此查询,否则这是我的唯一情况???@dev_medo有可能加快速度:1)重写查询以使用联接(将表用户与v1联接,将表用户与v2联接,并将用户与v2排除在外-但这是一个相当复杂的查询)2)更改表并添加索引。使用双联接(相同表的副本)我们将在可扩展性方面有所收获?