【问题标题】:SelectQuery with ' WHEN,THEN,ELSE,END' condition?SelectQuery 与 'WHEN,THEN,ELSE,END' 条件?
【发布时间】:2013-10-16 19:27:59
【问题描述】:

我对 selectquery 条件有疑问,我知道 selectquery 条件是错误的。所以任何人都可以在这里帮助我如何设置这个条件。

caseInfoList = new GroupModel<CaseInfoDataNew>();
Transaction transaction = Transaction.current();
SelectQuery<Record> selectQuery = transaction.selectQuery();
selectQuery.addSelect("CASE ValidInfoGroup.InfoGroup WHEN null THEN ValidInfo.InfoGroup ELSE ValidInfoGroup.InfoGroup END InfoGroup");

但我想将字符串参数更改为字段。怎么可能。

错误:- SelectQuery 类型中的方法 addSelect(Field...) 不适用于参数(String)

【问题讨论】:

  • 您对这个查询的目标是什么?
  • 我想用选择查询 selectQuery.addSelect("CASE ValidInfoGroup.InfoGroup WHEN null THEN ValidInfo.InfoGroup ELSE ValidInfoGroup.InfoGroup END InfoGroup");
  • 您没有在选择查询中的任何地方使用“选择”一词。想一想。
  • 何时为 NULL,而不是何时为 NULL

标签: java sql database transactions jooq


【解决方案1】:

检查 null is Null 应该使用

... CASE ValidInfoGroup.InfoGroup WHEN null THEN ....

【讨论】:

  • 约翰,你建议的那个 SQL 表达式 is wrong。 correct 表达WHEN 子句的方式是简单地写NULL,而不是IS NULL
  • 好的,我知道了,谢谢你的建议。我会更正答案。
  • 您不妨以当前形式将其删除;-)
【解决方案2】:

试试

selectQuery.addSelect("CASE ValidInfoGroup.InfoGroup WHEN Is NULL
THEN ValidInfo.InfoGroup ELSE ValidInfoGroup.InfoGroup END InfoGroup");

【讨论】:

    【解决方案3】:

    我怀疑你还没有尝试过 jOOQ 的 CASE expression support 吗?解决方案类似于:

    selectQuery.addSelect(
        DSL.decode().value(ValidInfoGroup.InfoGroup)
                    .when(DSL.val(null), ValidInfo.InfoGroup)
                    .otherwise(ValidInfoGroup.InfoGroup)
                    .as("InfoGroup")
    );
    

    但是,鉴于您的实际CASE 表达式,您可能最好使用nvl:

    selectQuery.addSelect(
        DSL.nvl(ValidInfoGroup.InfoGroup, ValidInfo.InfoGroup).as("InfoGroup")
    );
    

    【讨论】:

    • CivilFolderInfoEditViewModel 类型的方法 val(null) 未定义
    • 我更新了我的答案。 val() 来自 DSL。我建议你通读manual。它包含许多基本信息,您将需要这些信息来进一步使用 jOOQ
    • nic 回答 @Lukas Eder
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-28
    • 1970-01-01
    • 1970-01-01
    • 2013-12-04
    • 2011-05-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多