Все условия в предложении WHERE
применяются одновременно в SQL.Там нет порядка, гарантированного или подразумеваемого вообще.Это справедливо для любой СУБД SQL, а не только для SAP HANA.
Чтобы иметь взвешенный критерий выбора, необходимо создать весовую функцию, как указано в других ответах.Один из подходов, который довольно легко реализовать, состоит в том, чтобы сначала создать SELECT
s для всех возможных весов, а затем выбрать записи с наибольшим / наименьшим весом.
Например:
WITH weighted AS (
SELECT 100 as SEL_WEIGHT, PK1, PK2
FROM TAB1 WHERE COL1 = 'VAL1'
UNION ALL
SELECT 60 as SEL_WEIGHT, PK1, PK2
FROM TAB1 WHERE COL1 = 'VAL2'
UNION ALL
SELECT -1 as SEL_WEIGHT, PK1, PK2
FROM TAB1 WHERE COL1 IS NULL)
SELECT
*
FROM
weighted
WHERE (PK1, PK2, SEL_WEIGHT) in
(SELECT PK1, PK2, MAX(SEL_WEIGHT) as MAX_WEIGHT
FROM weighted
GROUP BY PK1, PK2);
В этом примере подвыбор находит максимальный вес и соответствующие столбцы первичного ключа (PK1
, PK2
) и присоединяет их обратно в качестве окончательного критерия выбора к основному SELECT
.Записи с COL1 ='VAL1'
имеют самый высокий вес (100) и предпочтительнее записей с COL1='VAL2'
(60) или тех, где COL1
равно NULL
(-1).
Преимущество такой конструкции состоит в том, что легко увидеть, как определяются веса, и что каждый вес может иметь свою собственную независимую комбинацию условий.
Поскольку взвешенные критерии выбора не являютсястандарт в системах SQL, я настоятельно рекомендую сделать реализацию как можно более очевидной, чтобы избежать путаницы и недопонимания в дальнейшем.