我有一个以下的jOOQ查询,最初是在Lukas Eder问题的this帮助下撰写的。
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();
此查询正常运行。另外,我想修改以完成以下专长,但我不确定它实际上是可行的。用简单的英语:
“如果表中不存在具有相同”日期“列的行,则插入行。如果存在并且”实时关闭“列为真,则更新”关闭“,否则不执行任何操作。”< / p>
现有查询已经涵盖了第一部分,但第二部分是if ... update ...不是,这就是我需要帮助的地方。
答案 0 :(得分:1)
在普通的PostgreSQL中,您可以按如下方式编写此查询:
INSERT INTO data (ticker, open, high, low, close, date)
VALUES (:ticker, :open, :high, :low, :close, :date)
ON CONFLICT (date)
DO UPDATE SET close = false WHERE close
这转换为以下jOOQ查询:
DSL.using(configuration)
.insertInto(DATA)
.columns(
DATA.TICKER,
DATA.OPEN,
DATA.HIGH,
DATA.LOW,
DATA.CLOSE,
DATA.DATE)
.values(
dailyData.getTicker(),
dailyData.getOpen(),
dailyData.getHigh(),
dailyData.getLow(),
dailyData.getClose(),
dailyData.getDate())
.onConflict()
.doUpdate()
.set(DATA.CLOSE, inline(false))
.where(DATA.CLOSE)
.execute();