【发布时间】:2014-11-07 21:09:59
【问题描述】:
我确信这是一个愚蠢的问题,但在阅读完所有内容后,我无法弄清楚为 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 语句,该语句有效但强制每个查询运行两次(必须有比这更好的解决方案)。
任何建议,感谢您的帮助。
【问题讨论】:
-
现在尝试使用 COALESCE。好的,它看起来有效并且是正确的解决方案。如果此解决方案有任何更好的选择或潜在的陷阱,我会全力以赴。
-
其实 Coalesce 不是答案......仍在寻找。希望得到帮助
-
找到了一个 FOUND_ROW() 方法,我可以检查是否大于 0,然后遵循 if 逻辑。
-
“匹配所有 4 个”可能是指“匹配 4 个或多个”?而“NULL set”可能是指“空表”,即“没有行的表”?通过“条件集”,您可能是指“条件”(这里是“分离”)?此外,您的其余描述(“含义......”)不清楚。尝试使用足够多的词来描述您想要的行,而不是要经历的过程。 PS如果你必须将“fallback”放在引号中并给出定义,为什么还要使用它,尤其是在标题中?
-
除了你可能的意思是“如果有匹配的lender_id和县,返回它们,否则如果有匹配的lender_id返回它&'NA'代表县,否则如果有匹配的县返回lender_id 的它 & 1,否则返回 1 & 'NA'"?如果你有一些“有效”的东西,那么把它放到你的问题中来解释你想要什么。
标签: mysql database stored-procedures database-design mysql-logic