Если вы используете Spring Boot + Spring Security, вы можете сделать это в конфигурации безопасности.
В приведенном ниже примере я добавляю настраиваемый фильтр перед именем UsernamePasswordAuthenticationFilter (см. все фильтры Spring Spring по умолчанию и их порядок ).
@EnableWebSecurity
class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired FilterDependency filterDependency;
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.addFilterBefore(
new MyFilter(filterDependency),
UsernamePasswordAuthenticationFilter.class);
}
}
И класс фильтра
class MyFilter extends OncePerRequestFilter {
private final FilterDependency filterDependency;
public MyFilter(FilterDependency filterDependency) {
this.filterDependency = filterDependency;
}
@Override
protected void doFilterInternal(HttpServletRequest request,
HttpServletResponse response,
FilterChain filterChain)
throws ServletException, IOException {
// filter
filterChain.doFilter(request, response);
}
}
Требуемая операция набора называется MINUS, но в SQL Server ключевое слово EXCEPT
SELECT ... // all documents
EXCEPT
SELECT ... // active documents
Я полагаю, что операция EXCEPT set стала доступна в SQL Server 2005.
SELECT roll_number FROM profile WHERE(catagory='Attest and Eat' or catagory='Live and Eat') and status='OK' EXCEPT SELECT roll_number from meal_status WHERE date='29' AND month='1'
Вы можете попробовать такую команду, чтобы вычесть таблицу из другой.
Какой у вас движок БД?
В Oracle вы можете использовать MINUS set set.
В MS SQLServer 2005 и новее вы можете использовать , КРОМЕ .
Я верю, что ИСКЛЮЧЕНИЕ - это то, что вы ищете. Синтаксис похож на UNION или INTERSECT.
В MS TSql, я думаю, вам нужно ключевое слово EXCEPT.
query1 EXCEPT query2
Которое вернет все строки, найденные в первом запросе, которые также не найдены во втором запросе.
select * from MyTable1
where MyTable1.Field1 not in (
select Field1 from MyTable2)
Все хорошие ответы, но отсутствует один момент: у спрашивающего (OP) есть хранимые процедуры ...
Вы должны определить временные таблицы (на основе вашей платформы) для загрузки данных
INSERT ...
EXEC getActive
INSERT ...
EXEC getInactive
Затем используйте EXCEPT / EXISTS / MINUS / IN / OUTER JOIN / etc ...
Предполагая, что существуют уникальные идентификаторы, которые соответствуют в двух таблицах:
select * from table_both b
where not exists (select * from table_active a where a.id = b.id)
SELECT both.*
FROM both LEFT OTUER JOIN inactives USING (whatever_id)
WHERE inactives.whatever_id IS NULL;
или
SELECT * FROM both
EXCEPT
SELECT * FROM inactives;
SELECT * FROM Table1
LEFT JOIN Table2 on Table1.id = Table2.id
WHERE Table2.id IS NULL
это должно работать практически на любом ядре базы данных