MYSQL хранимая процедура Quad Fallback Logic

Я уверен, что это глупый вопрос, но после прочтения всего, я не могу найти правильный способ создания хранимой процедуры с резервной логикой для предложения Where.

У меня есть следующий запрос:

SELECT FeeName, Amount, Category, VariableName 
FROM client_rates WHERE state_abv = state_abvIN 
AND Purchase= purchaseIN AND Category= CategoryIN And client_id=client_idIN AND
agent_id=agent_idIN AND ((lender_id=lender_idIN AND county=countyIN) OR (lender_id=lender_idIN
AND
county='NA') OR (lender_id=1 AND county=countyIN) OR (lender_id=1 AND county='NA'));

Поскольку я использовал ИЛИ, он вернет набор, который соответствует всем 4 условиям. То, что я хочу, - это "отступить" от условий.

То есть я хочу, чтобы он возвращал набор, в котором (lender_id=lender_idIN AND county=countyIN) возвращает значение. Однако, если он возвращает набор NULL, попробуйте следующий набор условий (lender_id=lender_idIN AND county='NA') и т. Д.

Я не думаю, что CASE будет работать для этой проблемы, и я однажды использовал вложенные операторы IF EXIST, которые работали, но заставляли каждый запрос выполняться дважды (должно быть лучшее решение, чем это).

Любые предложения и спасибо за помощь.

1 ответ

Решение

Ваш вопрос не ясен. Я предполагаю, что символы... IN являются параметрами, а не столбцами, что "NA" является возможным значением для county в client_rates и что в последнем условии AND вашего WHERE вы хотите вернуть строки, где (...), в противном случае где (...), иначе где (...) и т. д. (Выражение CASE вычисляется только до первого истинного WHEN.)

SELECT FeeName, Amount, Category, VariableName 
FROM client_rates
WHERE state_abv=state_abvIN 
AND Purchase=purchaseIN AND Category=CategoryIN
AND client_id=client_idIN AND agent_id=agent_idIN
AND CASE WHEN (lender_id=lender_idIN AND county=countyIN) THEN 1
    WHEN (lender_id=lender_idIN AND county='NA') THEN 1
    WHEN (lender_id=1 AND county=countyIN) THEN 1
    ELSE (lender_id=1 AND county='NA')
    END;

PS: Но этот запрос отличается от следующего: когда есть совпадение для всего до CASE, если lender_idIN не найден, тогда возвращается 1 для lender_id (независимо от того, существует ли lender_id=1) и если countyIN нет найденный, тогда "NA" возвращается для округа (независимо от того, существует округ или нет "NA"). (Вероятно, это означает, что "NA" не является возможным значением для county в client_rates.) Когда они дают разные результаты: Если lender_idIN не найден, но нет значения client_rates lender_id, равного 1, и / или если countyIN не найдено, но нет client_rates значение округа 'NA'. Тогда первый запрос вернет пустую таблицу, но второй запрос вернет 1 для lender_id и / или 'NA' для округа. Сделайте свое "Смысл..." ясным! Включите запрос "который сработал" (если вы уверены, что он сделал).

Другие вопросы по тегам