我有这个代码片段,我想根据TABLE_B中与条件匹配的单独行进行更新,然后每次匹配更新TABLE A中的字段。如果我进行单个更新,它工作正常。但是,如果第一条记录匹配,则会出现问题,它也会对第二个id执行相同的更新。我如何对一组与条件匹配的id进行不同的批量更新?:
UPDATE TABLE_A SET FOO
= (CASE WHEN EXISTS (SELECT * FROM TABLE_B
WHERE ID in (‘123’, ‘456’)
AND (START_DATE <= TRUNC(SYSDATE) AND END_DATE >= TRUNC(SYSDATE)))
THEN 'Y' ELSE 'N' END ),WHERE ID in (‘123’, ‘456’);
字符串
需要注意的一点是,我希望动态地传入一个随机数量的id(通过代码),这样就不会只有两个id,而是可以有更多的id。
1条答案
按热度按时间snvhrwxg1#
您可以使用合并到来完成它。没有提供示例数据-我将创建一些只是作为示例:
字符串
现在我们可以连接表并定义FOO列的值:
型
MERGE INTO可以使用上述查询来更新列FOO
型
你应该调整它以满足你的上下文。确保行是1到1连接的,以避免错误消息,并确保在表a中寻址正确的行。这可以在所使用的查询中或在ON条件中或在Where子句中完成,或者它们的任何组合,
型