Выберите место в списке или выберите все наиболее элегантно
Для оператора 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)