【发布时间】:2011-03-18 17:59:32
【问题描述】:
我想将插入/更新与 case 语句结合起来,这意味着如果它不存在我想插入该行,如果它存在则更新它,但在这两种情况下使用不同的值(更新时取决于 id ) 并在插入时,然后我设置它...
这应该发生在单个 SQL 语句中:-)
简而言之:我正在尝试将这两个语句合并为一个语句:
1)。插入/更新:
MERGE INTO table_name USING dual ON (id='{id}')
WHEN MATCHED THEN UPDATE SET {col1}='{val1}', {col2}={val2}
WHEN NOT MATCHED THEN INSERT ({id}, {col1}, {col2}) VALUES ('{id}', '{val1}', {val2})
2)。用大小写更新不同的值:
UPDATE SIGNALVALUE
SET
SIGNUMVALUE = CASE SIGID
WHEN 49634 THEN 1.1
WHEN 49674 THEN 2.2
WHEN 49675 THEN 1.8
END,
UPDATETIME = CASE SIGID
WHEN 49634 THEN TO_TIMESTAMP_TZ('2011-03-18 18:24:56:00', 'YYYY-MM-DD HH24:MI:SS:FF6 TZR')
WHEN 49674 THEN TO_TIMESTAMP_TZ('2011-03-18 18:24:56:00', 'YYYY-MM-DD HH24:MI:SS:FF6 TZR')
WHEN 49675 THEN TO_TIMESTAMP_TZ('2011-03-18 18:24:56:00', 'YYYY-MM-DD HH24:MI:SS:FF6 TZR')
END
WHERE SIGID IN (49634, 49674, 49675)
这些陈述只是示例。实际上,要插入/更新的行更多,而且这种情况经常发生,所以我试图尽量减少查询量。
我也不能进行更新,然后查看有多少行受到影响,然后插入没有影响的行,因为我不知道需要插入的行的 ID 与需要更新的行的 ID。至少据我所知...请纠正我!
【问题讨论】: