Я использую MS SQL Server 2014, и у меня одна таблица выглядит следующим образом: (table1)
PropertyId
1
2
3
4
И еще одна таблица выглядит следующим образом: (table2)
PropertyId Filter
1 1
1 2
2 1
3 1
4 2
Я хочу получить все свойства из первой таблицы, имеющей фильтр 1 И 2 (в данном случае только PropertyId 1)
Я могу сделать это, используя:
Select * from table1 where id in (select PropertyId from table2 where filter = 1) AND (select PropertyId from table2 where filter = 2)
Если я использую соединение, Я получу все свойства, которые есть в table2:
Select * from table1 join table2 on table1.PropertyId = table2.PropertyId where table2.Filter in (1,2)
Table1 получил около 200'000 строк, а table2 - около 2'500'000 строк, поэтому решение должно быть действительно эффективным :)
РЕДАКТИРОВАТЬ: Извините за неясность в моем вопросе:
- Таблица 1 содержит 22 столбца, а таблица 2 содержит 7 столбцов
- Запрос может иметь до 13фильтры, поэтому запрос должен обрабатывать это
- Если это возможно, я бы предпочел не иметь больше, чем один или два выбора