MySQL Выбирает отдельные строки с одинаковым идентификатором с другим значением в столбце и исключает конкретное значение в другом столбце - PullRequest
0 голосов
/ 11 октября 2018

У меня есть таблица базы данных 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

Я хочу выбрать идентификаторы, которые имеют несколько пользователей.В этом состоянии действуют пользователи 1 и 2.Но проблема в том, что наряду с вышеуказанным условием я также хотел выбрать тех, у кого нет значения task_id = 10 .Итак, конечный результат должен быть id = 1.

Я выполнил первое условие, выполненное с помощью этого сообщения.

Но не смог достичь результатаисключая 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 голосов
/ 11 октября 2018

Просто используйте агрегацию и 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...