如何在jOOQ中避免表别名周围的引号

杰夫·杰德里森

我有以下选择查询创建:

final DSLContext create = DSL.using(..., SQLDialect.POSTGRES);

create
 .select(DSL.field("identifier"), DSL.field("name"), 
         create.selectCount()
               .from(DSL.table("person"))
               .where(DSL.field("identifier").eq(DSL.field("personOuter.identifier")))
               .asField("count"))
 .from(DSL.table("person").as("personOuter"))

jOOQ生成以下查询:

select 
    identifier, 
    name, 
   (select count(*) 
    from person 
    where identifier = personOuter.identifier) as "count" 
from person as "personOuter"

查询应为:

select 
    identifier, 
    name, 
   (select count(*) 
    from person 
    where identifier = personOuter.identifier) as "count" 
from person as personOuter

后者查询在PostgreSQL中完美地工作。表别名不应用引号引起来。

这是一个错误吗?

(请注意,查询是非常愚蠢的。我正在使用jOOQ进行评估。)

以下“黑客”作品:

create
 .select(DSL.field("identifier"), DSL.field("name"), 
         create.selectCount()
               .from(DSL.table("person"))
               .where(DSL.field("identifier").eq(DSL.field("personOuter.identifier")))
               .asField("count"))
 .from("person as personOuter")
卢卡斯·埃德(Lukas Eder)

默认情况下,jOOQ会将所有标识符包装在引号中,以便能够正确处理区分大小写的情况。

令人困惑的部分是为什么这么做并不是为了做到DSL.field(String)而是为了做到Field.as(String)原因是jOOQ对这两种方法都重复使用了String类型:

  • 像一样的纯SQLDSL.field(String),其中输入的String并不真正表示标识符,而是任意的SQL表达式
  • 如中的标识符DSL.name(String),其中输入String表示名称/标识符。DSL.fieldByName(String)可以创建Field由(模式)/表/列标识符组成的类型。

为了从所有生成的标识符中删除引号,您还可以将更Settings.renderNameStyle改为RenderNameStyle.AS_IS

有关更多信息,请Settings参见此处

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何避免jOOQ中的值引起引号

如何使用Calc在表中的数据周围添加双引号

如何在Golang中删除字符串周围的引号

如何在python中删除字符串周围的引号?

如何在shell脚本中的变量周围加引号

你如何在 Python 中的 for 循环的结果周围加上引号?

这些表周围的反引号(`)如何逃脱?

如何在SQL参数周围加上引号?

如何在shell脚本中删除Json文件中字符串周围的额外引号

如何在 Excel 中的列中的值周围添加括号和引号?

如何在Shell脚本中的变量中存储的每个单词周围添加引号

如何在R中的字符串中的每个单词周围添加引号?

如何在Eclipse中在所选文本周围添加引号

sqlplus中如何在字符串结果周围包含双引号?

如何在VS Code中突出显示的文本周围添加引号?

Sqoop + Postgresql:如何防止在表名周围加引号

如何在yii2的ActiveRecord中编写表别名

如何在Laravel / Eloquent中别名多态表

如何在使用ruby的反引号操作中使用bash配置文件中定义的别名?

jOOQ和自动生成,如何避免表POJO中的UDT记录

如何在管道分隔的字段周围添加双引号(“”)

如何避免在 Pages 中替换引号

NiFi-如何从FlowFile内容中删除周围的双引号

如何在Linux内核模块内的快捷方式的printk宏中避免使用引号(“ ...”)

有什么方法可以避免在R中的URL周围使用双引号?

删除Erlang中的周围引号

如何在POSIX shell脚本中检查变量是否为整数(避免周围有空格问题)?

如何在'from'别名上加入表?

cshell别名:如何在cshell别名中使用嵌套的单引号(')