我试图运行此更新查询:
val updatedRows: Int = jooqDSL.dsl update ACCOUNT set(
ACCOUNT.LOGIN_MEANS, loginMeans.loginType.toString) set(
ACCOUNT.LOGIN_DATA, loginMeans.loginData) where (
ACCOUNT.ID equal accountId) execute()
但是如果我没有使用不同的ACCOUNT.ID但具有相同的登录数据和记录的记录,则必须仅更新 。手段。我可以在此之前运行搜索,以尝试查找这些记录(如果存在)。问题是我需要这个查询是一个单一的事务。 所以我考虑在查询中添加一个条件 - 只有当查询没有找到具有相同平均值/数据字段的任何其他记录时,查询才会运行,但我找不到任何有关如何操作的帮助它与DSL和Scala。 感谢
答案 0 :(得分:2)
这通常会在具有Sheets("MyOtherSheet").Range("MyOtherSheetRangeAddress").ProperRangeMethod
约束的数据库中解决:
UNIQUE
如果更新会产生现有的ALTER TABLE account
ADD CONSTRAINT acco_uk_means_data UNIQUE (login_means, login_data)
组合,则上述语句将抛出约束违例异常。
如果约束不是一个选项,那么只需添加(login_means, login_data)
谓词:
NOT EXISTS
您可能仍会在这两列上添加索引:
val updatedRows: Int = jooqDSL.dsl
.update(ACCOUNT)
.set(ACCOUNT.LOGIN_MEANS, loginMeans.loginType.toString)
.set(ACCOUNT.LOGIN_DATA, loginMeans.loginData)
.where(ACCOUNT.ID equal accountId)
.andNotExists(
selectOne()
.from(ACCOUNT)
.where(ACCOUNT.LOGIN_MEANS.equal(loginMeans.loginType.toString))
.and(ACCOUNT.LOGIN_DATA.equal(loginMeans.loginData))
)
.execute()