我正在尝试使用 jOOQ 查找给定列表中不存在的值的列表。
例如,我的列表中有值1
, 2
, 3
, 4
。
数据库已经有1
和的条目2
。
我正在寻找一个 jOOQ 查询,它将返回结果3
,4
。
我知道这可以通过 sql 中的VALUES
andEXCEPT
术语来完成,并且我知道这些存在于 jOOQ 中,并且一直在尝试复制这些,但是这里解释的使用值的简单案例使用静态列表(而我的将提供以编程方式),我不确定这是否是原因,或者它是否是更通用的语法。我还没有except
在 jOOQ online 中找到一个很好的例子。
我试过的:
List<String> valuesList
create.select()
.from(values(getRowsFromList(valuesList)))
.except(select(TABLE.VALUE).from(TABLE))
.fetch(TABLE.VALUE)
values 需要一个 varargRowN
对象,所以我正在转换这些值
private RowN[] getRowsFromList(List<String> rows)
{
return rows.stream().map(DSL::row).toArray(RowN[]::new);
}
错误:
java.lang.IllegalArgumentException: Field ("public"."table"."value") is not contained in Row ("v"."c1")
使用 java 11、postgres 11 后端、jooq 3.13.12