uid_table_1_item имеет много разных uid_table_2_item, каждый отдельно записью
1 | 12
1 | 15
1 | 16
1 | 18
2 | 16
2 | 18
и есть массив uid_table_2_item, вот вопрос как сделать выборку таким способом чтобы получить все uid_table_1_item из table_3 у которых все uid_table_2_item входят в переданный массив?
select distinct uid_table_1_item
from table3 t3
left join table3 t3n on t3n.uid_table_2_item not in (массив uid_table_2_item) and t3.uid_table_1_item = t3n.uid_table_1_item
where t3.uid_table_2_item in (массив uid_table_2_item)
and t3n.uid_table_2_item is not null
Тогда вижу 2 варианта:
1.собираем все uid_table_2_item по каждому uid_table_1_item в одну строку с помощью group_concat, то же самое нужно сделать с массивом, потом отбираем простым сравнение.
2.Немного модифицируем запрос из моего посат, таким образом:
- заменяем в join заменяем not in (массив uid_table_2_item), на
uid_table_2_item=<первое значение из массива uid_table_2_item>
- нужно в запрос добавить столько аналогичных join конструкций, сколько значений в массиве (в каждом следующем join нужно сравнивать со следующим элементом массива).
- во фразе where отобрать
t3n.uid_table_2_item is not null
для каждого из добавленных join
Второй вариант прокатит, если в массиве ограниченное и достаточно не большое количество значений, запрос по второму варианту, нужно формировать динамически.
В первом варианте, можно попробовать group_concat заменить на что-нибудь, работающее с числами. Смысл в том, чтобы несколько значений представить в виде одного. Конкатенация не самый хороший вариант. Подошло бы хэширование, но не уверен что есть такая возможность.