Java jOOQ-如何将.whereNotExists()与条件更新一起使用?
我有一个下面的jOOQ查询,最初是在有问题的帮助下编写的Java jOOQ-如何将.whereNotExists()与条件更新一起使用?,java,sql,postgresql,jooq,Java,Sql,Postgresql,Jooq,我有一个下面的jOOQ查询,最初是在有问题的帮助下编写的 create.insertInto(DATA,DATA.TICKER,DATA.OPEN,DATA.HIGH,DATA.LOW,DATA.CLOSE,DATA.DATE) .select( select( val(dailyData.getTicker()), val(dailyData.getOpen()), val(dailyData.getHigh()), va
create.insertInto(DATA,DATA.TICKER,DATA.OPEN,DATA.HIGH,DATA.LOW,DATA.CLOSE,DATA.DATE)
.select(
select(
val(dailyData.getTicker()),
val(dailyData.getOpen()),
val(dailyData.getHigh()),
val(dailyData.getLow()),
val(dailyData.getClose()),
val(dailyData.getDate())
)
.whereNotExists(
selectOne()
.from(DATA)
.where(DATA.DATE.eq(dailyData.getDate()))
)
).execute();
此查询工作正常。此外,我想修改以完成以下壮举,但我不确定它是否确实可行。用简单的英语:
如果表中不存在具有相同“日期”列的行,请插入该行。如果该行存在且“实时关闭”列为true,请更新“关闭”,否则不执行任何操作
第一部分已包含在现有查询中,但第二部分包含if…update。。。不是,这就是我需要帮助的地方 在纯PostgreSQL中,您可以按如下方式编写此查询:
插入数据(股票行情、开盘、高位、低位、收盘、日期)
值(:标记器、:打开、:高、:低、:关闭、:日期)
关于冲突(日期)
DO UPDATE SET close=关闭时为false
这将转换为以下jOOQ查询:
DSL.使用(配置)
.insertInto(数据)
.栏目(
DATA.TICKER,
DATA.OPEN,
高数据,
数据。低,
DATA.CLOSE,
数据(日期)
.价值观(
dailyData.getTicker(),
dailyData.getOpen(),
dailyData.getHigh(),
dailyData.getLow(),
dailyData.getClose(),
dailyData.getDate())
.onConflict()
.doUpdate()
.set(DATA.CLOSE,内联(false))
.where(DATA.CLOSE)
.execute();
稍作修改后,它似乎完全实现了我想要的功能。再次感谢你。我不会想到我真正需要的是一个完全不同的查询。