【问题标题】:DB2 insert if not present and select如果不存在,则 DB2 插入并选择
【发布时间】:2012-06-01 10:26:10
【问题描述】:

我有一个 DB2 数据库表

Users
------
userId: BIGINT

我需要从表中为用户返回一行。如果该行不存在,则应将其插入并返回。 有没有一条语句可以做到这一点

【问题讨论】:

    标签: sql select insert db2


    【解决方案1】:

    您可以使用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(未找到行)。但是,是的,我也没有找到解决这个问题的方法。
    • @X-Zero:在我看来,你可以用普通的INSERT 做的任何事情都可以应用于MERGE,但很可惜,事实并非如此。 :(
    • #headdesk# - 抱歉,我的意思是可以写INSERTs,只在重复存在的情况下添加行(尽管从技术上讲,我所说的原来也是正确的……)
    • @X-Zero:我想我明白了你的意思,我只是在发表评论,我认为MERGE 应该和INSERT 做同样的事情(当你在显然是合并:P)
    猜你喜欢
    • 1970-01-01
    • 2012-03-14
    • 2022-10-13
    • 2018-02-16
    • 2015-07-18
    • 2018-09-17
    • 2020-02-04
    • 2014-11-30
    • 2014-06-11
    相关资源
    最近更新 更多