在DB2中,我需要执行SELECT FROM UPDATE
,在单个事务中放置更新选择.
但我需要确保每个事务只更新一条记录.
熟悉MySQL’s UPDATE
选项中的LIMIT子句
places a limit on the number of rows that can be updated
我在DB2’s UPDATE
reference寻找类似的东西,但没有成功.
如何在DB2中实现类似的功能?
编辑:在我的方案中,我必须根据要求提供1000个优惠券代码.我只需要选择(任何)尚未给出的那个.
解决方法:
这个问题使用了一些含糊不清的术语,使得不清楚需要完成什么.幸运的是,DB2为各种SQL模式提供了强大的支持.
要限制UPDATE修改的行数:
UPDATE
( SELECT t.column1 FROM someschema.sometable t WHERE ... FETCH FIRST ROW ONLY
)
SET column1 = 'newvalue';
UPDATE语句永远不会看到基表,只看到过滤它的表达式,因此您可以控制更新哪些行.
要插入有限数量的新行:
INSERT INTO mktg.offeredcoupons( cust_id, coupon_id, offered_on, expires_on )
SELECT c.cust_id, 1234, CURRENT TIMESTAMP, CURRENT TIMESTAMP + 30 DAYS
FROM mktg.customers c
LEFT OUTER JOIN mktg.offered_coupons o
ON o.cust_id = c.cust_id
WHERE ....
AND o.cust_id IS NULL
FETCH FIRST 1000 ROWS ONLY;
这就是DB2从UPDATE,INSERT或DELETE语句支持SELECT的方式:
SELECT column1 FROM NEW TABLE (
UPDATE ( SELECT column1 FROM someschema.sometable
WHERE ... FETCH FIRST ROW ONLY
)
SET column1 = 'newvalue'
) AS x;
SELECT将仅从修改的行返回数据.