【问题标题】:MYSQL Stored Procedure Query Fallback LogicMYSQL 存储过程查询回退逻辑
【发布时间】: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


【解决方案1】:

你的问题不清楚。我假设 ...IN 符号是参数而不是列,“NA”是 client_rates 中县的可能值,并且在 WHERE 的最后一个 AND 条件中,您希望返回行 where (...),否则where (...), else 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')。 (这可能涉及 'NA' 不是 client_rates 中县的可能值。)当他们给出不同的结果时:如果没有找到 lender_idIN 但没有 client_rates lender_id 值为 1 和/或如果没有找到 CountyIN 但没有client_rates 县值'NA'。然后第一个查询将返回一个空表,但第二个查询返回 1 表示贷方 ID 和/或“NA”表示县。让你的“意义……”清楚!包括查询“哪个有效”(如果您确定有效)。

【讨论】:

  • 感谢您的帮助。如果有任何新问题,我会尽量说得更清楚。
猜你喜欢
  • 2012-01-22
  • 1970-01-01
  • 1970-01-01
  • 2011-11-04
  • 1970-01-01
  • 2012-06-24
  • 2013-09-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多