Поведение IN с пустым подзапросом - PullRequest
1 голос
/ 05 ноября 2019

Я хочу выбрать каждого клиента из таблицы KNA1, у которого нет записей в таблице KNBK.

Поэтому я сделал запрос на выборку, который должен сделать это для меня:

SELECT-OPTIONS: s_kn_nr FOR kna1-kunnr.
SELECT-OPTIONS: s_kn_okd FOR kna1-ktokd.

SELECT * FROM kna1
    INTO TABLE @DATA(ls_kna1)
    WHERE kunnr IN @s_kn_nr
      AND ktokd IN @s_kn_okd
      and kunnr not in ( select kunnr from knbk where kunnr in @s_kr_nr )

Теперь мой вопрос: обрабатывает ли запрос select пустые подвыборы так же, как пустые параметры выбора, и просто выбирает все?

1 Ответ

3 голосов
/ 05 ноября 2019

Ответ прост: нет.

Такой подзапрос возвращает набор, и IN функционирует здесь точно так же, как математическая операция принадлежности к набору или нет. Так что если набор пуст, то ни один элемент не принадлежит ему.

...