MYSQL存储过程查询回退逻辑

标签 mysql database stored-procedures database-design mysql-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 中 County 的可能值,并且在 WHERE 的最后一个 AND 条件中您想要返回行 where (...),否则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,则为 County 返回“NA”(无论是否存在 County='NA')。 (这可能涉及“NA”不是 client_rates 中的 County 的可能值。)当它们给出不同的结果时:如果未找到 lender_idIN 但没有 client_rates lender_id 值为 1 和/或如果未找到 CountyIN 但没有client_rates 县值为“NA”。然后,第一个查询将返回一个空表,但第二个查询将返回 1(代表 lender_id)和/或“NA”(代表县)。把你的“意思……”说清楚!包括查询“哪个有效”(如果您确定它有效)。

关于MYSQL存储过程查询回退逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26810139/

相关文章:

mysql - 存储过程,不正确的参数数量错误?

mysql - 我正在尝试通过 jdbc 代码使用 mysql 5.5 进行简单的参数查询

php - MYSQL php数据库插入包括图像上传

mysql - 如何在 Doctrine2 中对 FROM 语句执行子查询

MySql 不允许在表中添加值 -> ERROR 1054

sql - 将一条记录链接到单独表中的多条记录

c# - 将存储过程 PIVOT 表转换为 LINQ 查询

php - 从 MYSQL 表中删除

java - 获取 Spring 嵌入式数据库内容

MySQL存储过程插入验证