这是我的sql语句:
select count(*) from source s
join(select id as I from source where name is not null) e
on s.name = e.I
这是我在java中的内容
Source s = SOURCE.as("s");
TableLike<?> e = create.select(SOURCE.ID.as("I"))
.from(SOURCE)
.where(SOURCE.NAME.isNotNull()
.asTable().as("e");
create.selectCount()
.from(s)
.join(e)
.on(s.NAME.equal(e.I))
.fetchOne().value1();
我认为TableLike不是正确的类型,因为当我尝试执行e.I
时出现错误答案 0 :(得分:4)
不幸的是,(目前,从jOOQ 3.2开始)没有办法从派生表I
中类型安全地取消引用e
列,因为Java编译器无法知道存在一个I
列。你将不得不求助于不安全的方法:
// Enforcing typesafety using coercion:
.join(e)
.on(s.NAME.equal(e.field("I").coerce(String.class))
// Circumventing typesafety using raw types
.join(e)
.on(s.NAME.equal((Field) e.field("I")))
通过重复使用I
字段可以实现更多的类型安全:
Source s = SOURCE.as("s");
Field<String> I = SOURCE.ID.as("I");
TableLike<?> e = create.select()
.from(SOURCE)
.where(SOURCE.NAME.isNotNull())
.asTable().as("e");
create.selectCount()
.from(s)
.join(e)
.on(s.NAME.equal(e.field(I)))
.fetchOne().value1();