我正在通过sql为as400执行包含超过200亿条记录的文件的更新。
UPDATE "LIBRARY"/AR#RMTPRL9
SET SENTFLAG = ' ', DATESENT = '0001-01-01', TIMESENT = '00:00:00', XMITT# = 0, LOCATION = 'PACI175A', ARBATCH# = ' ‘
WHERE LOCATION = 'PACI173A' AND ARBATCH# = 'PAR1981181'
如何在单个查询中为不同的arbatch#值运行此更新以节省时间?
例如:我想对ARBATCH#值使用相同的更新语句PAR19811284,PAR18736765等。
重新编辑:
我有以下数据:(将这些值移动到位置EFG)
LOCATION ARBATCH#
ABC 1234
ABC 5468
ABC 8765
XYZ 6759
XYZ 5432
这里我想实现一个查询,它将执行记录更新,如下所示:
UPDATE "LIBRARY"/AR#RMTPRL9
SET SENTFLAG = ' ', DATESENT = '0001-01-01', TIMESENT = '00:00:00', XMITT# = 0, LOCATION = 'EFG', ARBATCH# = ' ‘
WHERE LOCATION = 'ABC' AND ARBATCH# = '1234'
现在我怎么能成功地使用“in”进行这样的更新
答案 0 :(得分:0)
您可以使用in
:
UPDATE "LIBRARY"/AR#RMTPRL9
SET SENTFLAG = ' ', DATESENT = '0001-01-01',
TIMESENT = '00:00:00', XMITT# = 0, LOCATION = 'PACI175A', ARBATCH# = ' '
WHERE LOCATION = 'PACI173A' AND ARBATCH# IN( 'PAR1981181', PAR18736765 etc ...)
答案 1 :(得分:0)
你可以非常轻易地“欺骗”:
UPDATE "LIBRARY"/AR#RMTPRL9
SET SENTFLAG = ' ',
DATESENT = '0001-01-01', TIMESENT = '00:00:00',
XMITT# = 0,
LOCATION = 'EFG',
ARBATCH# = ' '
WHERE (LOCATION, ARBATCH#) IN (VALUES ('ABC', '1234'),
('ABC', '5468'),
('ABC', '8765'),
('XYZ', '6759'),
('XYZ', '5432'))
(语句在我的本地iSeries DB2实例上运行)
很明显,DATESENT
和TIMESENT
应合并为一个时间戳,并且可能也可以为空。我个人更喜欢sentAt
这样的名字,而不是列的类型。