Привет Пожалуйста, обратите внимание на следующую таблицуMysql минус запрос вопрос
user_id city_id role_id 101 1 a 101 2 b 101 3 c
То, что я хочу
Input Output city id role_id 1,2,3 All user_ids present in city_id 1 and 2 and 3 1,2 c All user_ids present in city_id 1 and 2 and not present in role_id c 1 b,c All user_ids present in city_id 1 and not present in role_id b,c 2 a,c All user_ids present in city_id 2 and not present in role_id a,c
Что самый простой способ сделать это? Примечание. У меня огромное количество записей в таблице, поэтому производительность также имеет значение.
Таким образом, в приведенном выше примере 101 будет возвращен только если я прохожу CITY_ID 1,2,3
Я попытался
select user_id, city_id, role_id from foo_table where city_id in (1,2) and role_id not in ('c') group by user_id having count(*) = 2;
и
select user_id, city_id, role_id from foo_table where city_id in (1,2) and user_id not in (select user_id from foo_table where role_id not in ('c'));
с неправильными результатами.
Update: мне нужно что-то вроде этого
select * from (select * from foo_table where city_id in (1)) s1 inner join (select * from foo_table where city_id in (2)) s2 on s1.user_id = s2.user_id and s1.user_id not in (select distinct(user_id) from foo_table where role_id in('c'));
Я все еще испытывая его.
В таблице вывода, город идентификатор для каждой записи будет пользователя вход? –
да выход будет 3 записи для вышеприведенного случая –
Это очень похоже на домашнее задание ... – sgeddes