0

我正在通过 sql for 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”来进行这样的更新

4

2 回答 2

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 ...)
于 2013-02-03T14:22:16.890 回答
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名称之类的东西,而不是包含列类型的东西。

于 2013-02-04T17:20:44.860 回答