当前位置: 首页 > 知识库问答 >
问题:

如何在DB2中更新或插入同一个表

董永宁
2023-03-14

我正在尝试更新 DB2 中的同一表中是否存在(如果不存在)或插入。

我有一个表“V _ OPORNAC”(scheme是SQLDBA),它包含三列,其中有两个主键:IDESTE (PK)、IDEPOZ (PK)、OPONAR

我的情况是,如果IDESTE=123456和IDEPOZ=0的数据(OPONAR)不存在,则插入新行,如果存在,则更新(OPONAR)。我试过这样做:

MERGE INTO SQLDBA.V_OPONAROC AS O1 
USING (SELECT IDESTE, IDEPOZ, OPONAR FROM SQLDBA.V_OPONAROC WHERE IDESTE = 123456 AND IDEPOZ = 0) AS O2
    ON (O1.IDESTE = O2.IDESTE)
WHEN MATCHED THEN
    UPDATE SET 
         OPONAR = 'test text'
WHEN NOT MATCHED THEN
    INSERT 
        (IDESTE, IDEPOZ, OPONAR) 
        VALUES (123456, 0, 'test new text')

执行上面的代码,我得到了这个错误:

Query 1 of 1, Rows read: 0, Elapsed time (seconds) - Total: 0,013, SQL query: 0,013, Reading results: 0
Query 1 of 1, Rows read: 3, Elapsed time (seconds) - Total: 0,002, SQL query: 0,001, Reading results: 0,001
Warning:   DB2 SQL Warning: SQLCODE=100, SQLSTATE=02000, SQLERRMC=null, DRIVER=4.21.29
SQLState:  02000
ErrorCode: 100

共有1个答案

晋鹤轩
2023-03-14

我想通了,通过使用“SYSIBM。系统嘟嘟1”

MERGE INTO SQLDBA.V_OPONAROC AS O1 
USING (SELECT 1 AS IDESTE, 2 AS IDEPOZ, 3 AS OPONAR FROM SYSIBM.SYSDUMMY1) AS O2
    ON (O1.IDESTE = 123456 AND O1.IDEPOZ = 0)
WHEN MATCHED THEN
    UPDATE SET 
        O1.OPONAR = 'test text'
WHEN NOT MATCHED THEN
    INSERT 
        (O1.IDESTE, O1.IDEPOZ, O1.OPONAR) 
        VALUES (123456, 0, 'test new text')
 类似资料:
  • 问题内容: 显然,以下是不正确的。 我得到的价值: SQL查询: MySQL说: 1093-您无法在FROM子句中指定目标表’aTable’用于更新 因此,我试图制作一个位图表,每一行对应一个位,并具有一个“ map”值。 要插入表中,我不想执行两个查询,而是想执行一个查询。我应该怎么做? 没有人对此发表评论,但是由于我正在尝试制作位图,因此应该是* 2而不是^ 2,是我的错误,请注意,这就是为什

  • 问题内容: 我有两个表,具有相同的架构- 我想将test2表中的值插入到test1中,但是如果具有相同主键的行已经存在,请对其进行更新。我知道在mysql中,您可以使用ON DUPLICATE KEY UPDATE做类似的事情- 但是我不知道如何使用另一个表中的SELECT来执行上述查询。我正在寻找的是表格查询- 该查询显然是无效的。如果有人可以从中提出有效的查询,我将不胜感激。 问题答案: 这应

  • 这是我的php文件...我想在第二个表成功插入后更新第一个表,我要选择并正确插入,但我想更新的行在数据插入后没有更新。 有人能告诉我如何写这在PHP mysqli程序的方式。

  • 问题内容: UPSERT操作会更新表或在表中插入一行,这取决于表是否已经有与数据匹配的行: 由于Oracle没有特定的UPSERT语句,执行此操作的最佳方法是什么? 问题答案: MERGE(“老式方式”)的替代方法:

  • 问题内容: 我在下面有一个SQL插入程序,它工作正常,但是我希望它检查DATE = xxxx,NAME = xxxx和JOB = xxx并更新HOURS(如果它们存在),否则插入新行。SQL可以做到这一点吗? 尝试以下具有相同结果的OR替换,每次都会添加一个新行。 例如: 如果以下内容位于数据库中,并且John要更新其工作时间,它将检查名称,日期,作业是否与尝试插入的值相同,并且它们是否仅更新HO

  • 问题内容: 我想向数据库表中添加一行,但是如果存在具有相同唯一键的行,我想更新该行。 例如: 假设唯一键为,并且在我的 数据库 中有一行。在这种情况下,我想用这些值更新该行。通常,这会产生错误。 如果使用它,将忽略该错误,但仍不会更新。 问题答案: 采用 查询: