Ближайший юридический эквивалент незаконного синтаксиса, указанного в вопросе:
select * from myTable m
where not exists (
select 1
from table(sys.ku$_vcnt('Done', 'Finished except', 'In Progress')) patterns
where m.status like patterns.column_value || '%'
)
Оба мои и @ ответ Sethionic делают возможным перечислить шаблоны динамически (только путем выбора другого источника, чем ДОПОЛНИТЕЛЬНОЕ sys.whatever
таблицы).
Обратите внимание, если мы должны были искать шаблон внутри строки (а не с самого начала) и базы данных, содержащихся, например status = 'Done In Progress'
, то мое решение (модифицированный для like '%' || patterns.column_value || '%'
) будет по-прежнему генерировать одну строку для данной записи, whileas решение @ Sethionic (модифицированное для другого вспомогательного соединения до a
) создало бы несколько строк для каждого появления шаблона. Не судите, что лучше, просто знайте различия и выбирайте, что лучше подходит вам.
Я пытался избежать длинного маршрута, но похоже, что это может быть единственный способ. – Matt
@Matt. Если это всего лишь написание немного более короткого текста SQL, чем просто использовать синтаксис, предложенный в этом ответе, и учиться жить с ним , Если речь идет о LIKEing строках из другой таблицы (так что вы не можете заранее создать список значений заранее), то это совсем другая проблема, которая потребует чего-то вроде: 'JOIN OTHER_TABLE ON NOT (YOUR_TABLE.FIELD LIKE OTHER_TABLE .FIELD) '... –
Я в конечном итоге использовал это для простоты, но ответы в регулярном выражении были полезны как возможность изучить новый бит Oracle. Спасибо всем – Matt