Как я 'вычитаю' sql таблицы?

Если вы используете 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);
    }
}

25
задан gbn 8 September 2009 в 19:54
поделиться

10 ответов

Требуемая операция набора называется MINUS, но в SQL Server ключевое слово EXCEPT

  SELECT ... // all documents
  EXCEPT
  SELECT ... // active documents

Я полагаю, что операция EXCEPT set стала доступна в SQL Server 2005.

42
ответ дан 28 November 2019 в 06:17
поделиться
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'

Вы можете попробовать такую ​​команду, чтобы вычесть таблицу из другой.

0
ответ дан Peter O. 15 October 2019 в 15:05
поделиться

Какой у вас движок БД?

В Oracle вы можете использовать MINUS set set.

В MS SQLServer 2005 и новее вы можете использовать , КРОМЕ .

2
ответ дан Pablo Santa Cruz 15 October 2019 в 15:05
поделиться

Я верю, что ИСКЛЮЧЕНИЕ - это то, что вы ищете. Синтаксис похож на UNION или INTERSECT.

3
ответ дан Dave Pirotte 15 October 2019 в 15:05
поделиться

В MS TSql, я думаю, вам нужно ключевое слово EXCEPT.

query1 EXCEPT query2

Которое вернет все строки, найденные в первом запросе, которые также не найдены во втором запросе.

1
ответ дан 28 November 2019 в 06:17
поделиться
select * from MyTable1
where MyTable1.Field1 not in (
  select Field1 from MyTable2)
3
ответ дан 28 November 2019 в 06:17
поделиться

Все хорошие ответы, но отсутствует один момент: у спрашивающего (OP) есть хранимые процедуры ...

Вы должны определить временные таблицы (на основе вашей платформы) для загрузки данных

INSERT ...
EXEC getActive

INSERT ...
EXEC getInactive

Затем используйте EXCEPT / EXISTS / MINUS / IN / OUTER JOIN / etc ...

8
ответ дан 28 November 2019 в 06:17
поделиться

Предполагая, что существуют уникальные идентификаторы, которые соответствуют в двух таблицах:

select * from table_both b
where not exists (select * from table_active a where a.id = b.id)
11
ответ дан 28 November 2019 в 06:17
поделиться
SELECT both.*
FROM both LEFT OTUER JOIN inactives USING (whatever_id)
WHERE inactives.whatever_id IS NULL;

или

SELECT * FROM both
EXCEPT
SELECT * FROM inactives;
2
ответ дан 28 November 2019 в 06:17
поделиться
SELECT * FROM Table1 
LEFT JOIN Table2 on Table1.id = Table2.id
WHERE Table2.id IS NULL

это должно работать практически на любом ядре базы данных

6
ответ дан 28 November 2019 в 06:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: