【发布时间】:2020-11-27 07:49:55
【问题描述】:
以下 jOOQ 查询在我的日志中发出一条 SQL 警告:Fields Ambiguous match found for id
db.select(FORWARDED_MESSAGE.SES_MESSAGE_ID).
from(FORWARDED_MESSAGE).
where(
FORWARDED_MESSAGE.FORWARDED.lt( DSL.currentTimestamp().subtract(
FORWARDED_MESSAGE.mailMapping().mailKeyword().mailDomain().account().
MESSAGE_RETENTION_DAYS ))).
fetch(FORWARDED_MESSAGE.SES_MESSAGE_ID);
生成的 SQL 似乎是正确的,但我不希望警告污染我的日志(我想知道 jOOQ 是否警告我需要注意的重要事项)。
关于模式表的一些上下文:
-
forwarded_message没有主键 -
mail_domain使用名为“域”的自然 PK -
mail_mapping、mail_keyword和account都有一个名为id的 PK
我尝试了以下方法,但无法说出Key ambiguous between tables:
db.select(FORWARDED_MESSAGE.SES_MESSAGE_ID).
from(FORWARDED_MESSAGE).
join(MAIL_MAPPING).onKey().
join(MAIL_KEYWORD).onKey().
join(MAIL_DOMAIN).onKey().
join(ACCOUNT).onKey().
where(
FORWARDED_MESSAGE.FORWARDED.lt(
DSL.currentTimestamp().subtract(ACCOUNT.MESSAGE_RETENTION_DAYS) )).
fetch(FORWARDED_MESSAGE.SES_MESSAGE_ID);
jOOQ 版本是3.13.4,DB 是postgres,使用pgjdbc 42.2.14。
问题:
如何解决Fields Ambiguous match found 警告?
注意:这不是 How to resolve ambiguous match when chaining generated Jooq classes 的欺骗,因为那是关于子分类的歧义 - 这个问题是关于简单的连接链接(跨具有重复 PK 列的表)。
【问题讨论】:
-
是否有带有警告的堆栈跟踪?所涉及的各种表的 DDL 是什么?
标签: jooq