Предположительно a.type_id
содержит значения, такие как 2
, 3
, 4
и т. Д. Первая case()
возвращает строку из (2,3)
.Это одно значение, поэтому IN становится тестом на равенство.2
не равно '(2,3)
.Поэтому первый код не работает.Тогда как второй case()
возвращает единственное значение 2
, которое может быть сопоставлено со значением в a.type_id
.
"в любом случае, если V_ID = 3, то он вернет все доступные данные, но если это не так, он вернет данные с a.type_id в (2,3) "
Как прокомментировали другие люди, это легко реализовать с помощью регулярных логических операций без необходимости case()
вообще:
SELECT *
FROM TBL_REASON_MAP A
WHERE V_ID = 3
or (V_ID != 3
and a.type_id IN (2,3));