【发布时间】:2012-06-01 10:26:10
【问题描述】:
我有一个 DB2 数据库表
Users
------
userId: BIGINT
我需要从表中为用户返回一行。如果该行不存在,则应将其插入并返回。 有没有一条语句可以做到这一点
【问题讨论】:
我有一个 DB2 数据库表
Users
------
userId: BIGINT
我需要从表中为用户返回一行。如果该行不存在,则应将其插入并返回。 有没有一条语句可以做到这一点
【问题讨论】:
您可以使用MERGE 在表中不存在 ID 时插入,如下所示:
MERGE INTO Users u (userId)
USING (VALUES (123)) AS m (userId)
ON u.userId = m.userId
WHEN NOT MATCHED THEN
INSERT (userID)
VALUES (m.userId)
ELSE IGNORE
还有一个语句可以让您获取插入到表中的内容(在INSERT 页面上搜索data-change-table-reference):
SELECT *
FROM NEW TABLE (
INSERT INTO Users(userId)
VALUES (123), (234)
)
很遗憾,您不能将这两个语句结合起来在一个语句中完成所有操作。我认为如果您需要唯一值,您可以做的最好的事情可能是使用INSERT 方法和compound SQL 并处理-803 SQLCODE。
【讨论】:
INSERTs,仅在存在“重复”时添加一行,这意味着您只需注意 SQLCODE 100(未找到行)。但是,是的,我也没有找到解决这个问题的方法。
INSERT 做的任何事情都可以应用于MERGE,但很可惜,事实并非如此。 :(
INSERTs,只在重复不存在的情况下添加行(尽管从技术上讲,我所说的原来也是正确的……)
MERGE 应该和INSERT 做同样的事情(当你在显然是合并:P)