Кодер написал(а):
111 написал(а):
У меня они и связаны по OR.
Положительные условия связываются между собой, конечно, по OR.
А вот с отрицательными вся совокупность положительных условий связывается по AND. И между собой, понятно, отрицательные связываются по AND.
RANGES - интервал.
Имеет место быть сложение множеств значений. Одни значения прибавляются, другие вычитаются - получаем итоговое множество значений.
"Значение поля лежит либо в интервале А, либо в интервале В, но не в интервале С и не в интервале D".
Фига. Все строчки в рейндже объединяются по OR вне зависимости от наличия NOT и в объединение дают единое условие. Можешь проверить.
Сам-то пробовал?
Много, конечно, в SAPе маразма встречается. Но до такого даже они не додумались. Логически подумай - какой был бы смысл в рэйнджесах, если бы все условия без разбора соединялись по OR?
Пробуй, проверяй, наслаждайся.
===================
SE16
Таблица TSTCT (первая попавшаяся).
Транзакция ST05 - включаем SQL-трассировку этой таблицы.
В SE16 для поля TCODE набираем следующее ограничение:
SIGN = 'I'.
AAAAAAAAAAAAAAAAAAAA - FFFFFFFFFFFFFFFFFFFFFFFF
GGGGGGGGGGGGGGGGGG - ZZZZZZZZZZZZZZZZZ
Добавляем отрицательных условий (SIGN = 'E')
FFFFFFFFFFFFFFFFFFFFFFFFFFF
EEEEEEEEEEEEEEEEEEEEEEE
Делаем выборку.
Идем в трассировщик, смотрим трэйс и наслаждаемся:
================================
SQL Statement
SELECT
"SPRSL" AS c ,"TCODE" AS c ,"TTEXT" AS c
FROM
"TSTCT"
WHERE
( "TCODE" BETWEEN @P000 AND @P001 OR "TCODE" BETWEEN @P002 AND @P003 ) AND
NOT "TCODE" IN ( @P004 , @P005 ) /* R3:/1BCDWB/DBTSTCT:1179 */ /*Dynamic
SQL statement no cursor, upto 200, conn. 0:2*/
Variable
A0(CH,20) = GGGGGGGGGGGGGGGGGGGG
A1(CH,20) = ZZZZZZZZZZZZZZZZZZZZ
A2(CH,20) = AAAAAAAAAAAAAAAAAAAA
A3(CH,20) = FFFFFFFFFFFFFFFFFFFF
A4(CH,20) = EEEEEEEEEEEEEEEEEEEE
A5(CH,20) = FFFFFFFFFFFFFFFFFFFF