mysql– 在Sequel中编写一个复杂的case语句?

mysql– 在Sequel中编写一个复杂的case语句?,第1张

概述我有一个相当复杂的case语句在MySQL中有效:SELECT # rest of code omitted CASE WHEN code = 'a' THEN 'x' WHEN code IN ('m', 'n') THEN 'y' WHEN class IN ('p', 'q') AND amount < 0 THEN 'z' ELSE

我有一个相当复杂的case语句在MySQL中有效:

SELECT # rest of code omittedCASE WHEN code = 'a' THEN 'x'  WHEN code IN ('m','n') THEN 'y'  WHEN class IN ('p','q') AND amount < 0 THEN 'z'  ELSE NulL END AS statusFROM # rest of code omitted

然而,所有在续集中写这篇文章的尝试都失败了.我使用它作为模板:

Sequel.case([[:c,1],[:d,2]],0) # (CASE WHEN "c" THEN 1 WHEN "d" THEN 2 ELSE 0 END)

(自Jeremy Evans’ Github起)

我最好的猜测是:

dataset.select( # rest of code omitted...[[(:code => 'a'),'x'],[(:code => 'b'),'y'],[(:class => ['p','q'],:amount < 0),'z']].case(nil).as(:status))

有任何想法吗?最佳答案在玩完这个游戏之后,我得出结论,虽然续集宝石的目标是“简单,灵活和强大”,但是当事情变得有点棘手时,它的语法会变得非常复杂.

这是我对您的查询的最佳尝试:

DB[:testtable].select(   Sequel.case([  [{code: 'a'},[{code: ['m','n']},[{class: ['p',(Sequel.expr(:amount) > 0) => true},'z']],nil).  as(:status))

这会产生以下(几乎正确的)sql:

SELECT (CASE WHEN (`code` = 'a') THEN 'x' WHEN (`code` IN ('m','n')) THEN 'y' WHEN ((`class` IN ('p','q')) AND ((`amount` > 0) IS TRUE)) THEN 'z' ELSE NulL END) AS `status` FROM `testtable`

我无法弄清楚如何在case语句中使用不等式运算符.也许你会有更多的运气.

我的建议是,您只需在sql中编写查询,它将更容易阅读,并且更易于维护.

总结

以上是内存溢出为你收集整理的mysql – 在Sequel中编写一个复杂的case语句?全部内容,希望文章能够帮你解决mysql – 在Sequel中编写一个复杂的case语句?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1168487.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-01
下一篇 2022-06-01

发表评论

登录后才能评论

评论列表(0条)

保存