MySQL选择具有相同ID的不同行,并在列中使用不同的值,并在另一列中排除特定的值

时间:2018-10-11 11:37:36

标签: mysql sql

我有一个如下所示的MySQL数据库表:

id   task_id     users
1       1          1
1       2          2
2       1          2
2       2          1
2      10          1
3       1          2
3       2          2
3       3          2
4       1          2

我想选择具有多个用户的ID。在这种情况下,用户1和2是有效的。但是问题是,除了上述条件外,我还想选择没有task_id = 10 的那些人。所以最终输出应为id = 1。

this post.的帮助下,我达到了第一个条件

但是无法获得排除task_id = 10的结果,因为尝试执行以下查询,它仍然显示用户1和2。

select distinct t.id
from table as t
join (
    select id
    from table
    group by id
    having count(distinct users) > 1
) as t2
on t.id = t2.id
AND task_id != 10

1 个答案:

答案 0 :(得分:3)

只需使用聚合和having;

select id
from t
group by t
having count(distinct user) > 1 and
       sum(task_id = 10) = 0;

如果您想要原始行,我可以使用exists来表达:

select t.*
from t
where not exists (select 1 from t t2 where t2.id = t.id and t2.task_id = 10) and
      exists (select 1 from t t2 where t2.id = t.id and t2.user <> t.user);