如何让jOOQ生成`delete 表别名.*`格式的MySQL删除语句
问题分析
MySQL 语法中,DELETE 别名 FROM 表 as 别名 ... 和 DELETE 别名.* FROM 表 as 别名 ... 语义完全一致,执行效果、性能没有任何差异,常规场景下不需要额外调整语法格式。
如果你的使用场景强制要求生成带.*的DELETE语句,可以按以下方式修改jOOQ代码:
调整方案
将原有的deleteFrom链式写法,替换为显式指定删除目标的delete(表达式) + from写法:
DSLContext ctx = DSL.using(c, SQLDialect.MYSQL); ctx.delete(field("fis.*")) .from(table("filestorage").as("fis")) .where( field("fis.file_id").eq(storageAudioFile.getId().toString()) .and(field("fis.scheme").eq(storageAudioFile.getScheme())) .and(field("fis.updated").eq(storageAudioFile.getUpdated())) ).limit(1).execute();
调整后jOOQ生成的SQL就会符合要求的delete fis.* from [...]格式。
如果你使用的是jOOQ代码生成器生成的表对象,不需要手写plain SQL字段,直接调用表对象的asterisk()方法即可:delete(FILESTORAGE.asterisk())。
内容的提问来源于stack exchange,提问作者sbrattla
相关产品推荐
相关产品推荐

