Выберите место в списке или выберите все наиболее элегантно

Для оператора select я устанавливаю часть условия where внешне в файле конфигурации в качестве параметра, например так (COL2 заполняется строковыми значениями):

SELECT COL1
      ,COL2
FROM TABLE1
WHERE COL2 = $external_parameter

Теперь у меня есть более сложный случай, когда мне нужен внешний параметр, чтобы быть списком. Всякий раз, когда значение COL2 находится в списке, его следует выбрать, однако, если список не предоставлен или какой-то "пустой" тег, каждое значение должно быть выбрано снова. Я пришел с идеей, но она не работает таким образом:

SELECT COL1
      ,COL2
FROM TABLE1
WHERE $external_list = ('') or COL2 IN $external_list

Таким образом, это утверждение будет верно для всех элементов COL2 когда предоставляется пустой список, и true для каждого элемента в списке, который соответствует списку, если предоставляется заполненный список.

Однако, если я предоставлю заполненный список, он не сработает при сравнении в первой половине оператора where:

('entry_a', 'entry_b') = ('')

Есть ли какой-нибудь запрос, который заставил бы его работать - лучше всего в одной строке, где оператор?

3 ответа

Попробуйте что-то вроде этого,

SELECT COL1
    ,COL2
FROM TABLE1
WHERE COL2 IN ($EXTERNAL_PARAMETER)
    OR 1 = (
        CASE 
            WHEN $EXTERNAL_PARAMETER = ''
                THEN 1
            ELSE 0
            END
        )

Попробуй это

 IF  $EXTERNAL_PARAMETER = ''
 SET $EXTERNAL_PARAMETER = NULL

SELECT COL1
    ,COL2
FROM TABLE1
WHERE COL2 = ISNULL($EXTERNAL_PARAMETER, COL2 ) 

Попробуй так

SELECT COL1
    ,COL2
FROM TABLE1
WHERE COL2 IN (
            CASE 
            WHEN $EXTERNAL_PARAMETER = ''
                THEN COL2 
            ELSE $EXTERNAL_PARAMETER
            END)
Другие вопросы по тегам