Как из таблицы выбрать записи по столбцу, имеющие одни значения и не имеющие другие?
Всем здравствуйте!
Есть таблица, заполненная тестовыми данными:
insert into ticket (user_id, type) values (1, 1);
insert into ticket (user_id, type) values (1, 2);
insert into ticket (user_id, type) values (1, 3);
insert into ticket (user_id, type) values (1, 4);
insert into ticket (user_id, type) values (2, 1);
insert into ticket (user_id, type) values (2, 2);
insert into ticket (user_id, type) values (2, 3);
insert into ticket (user_id, type) values (3, 1);
insert into ticket (user_id, type) values (3, 2);
insert into ticket (user_id, type) values (4, 4);
insert into ticket (user_id, type) values (5, 2);
insert into ticket (user_id, type) values (5, 3);
insert into ticket (user_id, type) values (6, 3);
insert into ticket (user_id, type) values (7, 1);
Как выбрать все user_id, у которых, например, type 2 и 3 и не 1 и 4? То есть запрос должен вернуть user_id = 5.
Или выбрать все user_id, у которых, например, type 1 и 2 и не 3 и 4? То есть запрос должен вернуть user_id = 3.
Результат нужно сгруппировать по user_id.
Для правильного вопроса надо знать половину ответа
SELECT DISTINCT `user_id`
FROM `ticket`
WHERE `user_id` IN (SELECT `user_id` FROM `ticket` WHERE `type` = 2)
AND `user_id` IN (SELECT `user_id` FROM `ticket` WHERE `type` = 3)
AND `user_id` NOT IN (SELECT `user_id` FROM `ticket` WHERE `type` = 1)
AND `user_id` NOT IN (SELECT `user_id` FROM `ticket` WHERE `type` = 4)