我正在尝试在表上执行单行插入/更新,但所有示例都是针对集合.
任何人都可以修复我的语法:
MERGE member_topic ON mt_member = 0 AND mt_topic = 110
WHEN MATCHED THEN UPDATE SET mt_notes = 'test'
WHEN NOT MATCHED THEN INSERT (mt_member, mt_topic, mt_notes) VALUES (0, 110, 'test')
Run Code Online (Sandbox Code Playgroud)
每个marc_s的解析是将单行转换为子查询 - 这使我认为MERGE命令并不真正用于单行upsert.
MERGE member_topic
USING (SELECT 0 mt_member, 110 mt_topic) as source
ON member_topic.mt_member = source.mt_member AND member_topic.mt_topic = source.mt_topic
WHEN MATCHED THEN UPDATE SET mt_notes = 'test'
WHEN NOT MATCHED THEN INSERT (mt_member, mt_topic, mt_notes) VALUES (0, 110, 'test');
Run Code Online (Sandbox Code Playgroud) 我们正在使用 Derby 并且有很多这样的代码:
try (ResultSet rs = executeQuery(...)) {
if (rs.next()) {
updateRowSet(rs, ...);
rs.updateRow();
} else {
executeUpdate(...);
}
}
Run Code Online (Sandbox Code Playgroud)
过去,我们正在寻找一种方法来在服务器端执行此逻辑,并且发现某些数据库支持“更新插入”(更新或插入)操作。Derby 有一个功能请求,MERGE INTO据说这是执行此操作的 SQL:2003 标准方式,因此我们坐下来观看了票证,时间过去了很多。
德比 10.11 终于加入了MERGE INTO。没有人有时间仔细阅读并更新代码以使用它,但是在阅读他们的文档时,他们的所有示例都显示从一张表合并到另一张表。但是等一下,我们的数据还没有在表中!
我知道我可以把它放在一个表中,但是它又是多个查询,这完全违背了使用它的意义。
我确信可以在不将其放入表格的情况下完成此操作,但由于文档没有显示单个示例,因此我不确定如何进行。
这是我一直在尝试的:
try (PreparedStatement ps = connection.prepareStatement(
"MERGE INTO things AS target " +
// Awkward point 1:
// It wants a "source" table, but I don't have one.
// So I thought I would try to use the same table …Run Code Online (Sandbox Code Playgroud)