我们正在使用 Derby 并且有很多这样的代码:
try (ResultSet rs = executeQuery(...)) {
    if (rs.next()) {
        updateRowSet(rs, ...);
        rs.updateRow();
    } else {
        executeUpdate(...);
    }
}
过去,我们正在寻找一种方法来在服务器端执行此逻辑,并且发现某些数据库支持“更新插入”(更新或插入)操作。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 …