簡體   English   中英

MYSQL存儲過程查詢回退邏輯

[英]MYSQL Stored Procedure Query 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'));

因為我用過OR,所以它將返回一個匹配所有4個條件的集合。 我想要的是通過條件“回退”。

意思是我希望它返回一個集合,其中(lender_id = lender_idIN AND county = countyIN)返回一個值。 但是,如果返回的是NULL集,則嘗試下一個條件集(lender_id = lender_idIN AND county ='NA')等。

我不認為CASE可以解決這個問題,我曾經使用嵌套的IF EXIST語句,但是該語句強制每個查詢運行兩次(必須有一個更好的解決方案)。

任何建議,謝謝您的幫助。

您的問題不清楚。 我假設... IN符號不是參數,也不是列,'NA'是client_rates中country的可能值,並且在您的WHERE的最后一個AND條件中,您想返回行(...),否則where(...),否則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,則將為lender_id返回1(無論是否存在lender_id = 1),而如果不包含countyIN找到后,將返回縣的“ NA”(是否有縣=“ NA”)。 (這可能涉及client_rates中的不適用縣的值'NA'。)當它們給出不同的結果時:如果未找到lender_idIN但沒有client_rates的lender_id值是1和/或未找到countyIN但沒有client_rates縣的值為“ NA”。 然后,第一個查詢將返回一個空表,但是第二個查詢將對lender_id返回1,並且/或者對縣返回'NA'。 讓您的“意思是...”清晰明了! 包括查詢“有效”(如果您確定確實有效)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM