[英]DB2 - SQL UPDATE statement using JOINS and SELECT statement
早晨,
我在 DB2 服务器 (IBM Power System) 上运行以下 SELECT 语句,它根据时间戳从 tableB 返回最新记录(一切正常)。
SELECT * FROM library1/tableA
JOIN library1/tableB on tableB.PRDCOD = tableA.NPROD
WHERE tableB.PRDCOD = '5520' and tableA.SPRTXT01 <> '0/9'
ORDER BY tableB.timstp DESC FETCH NEXT 1 ROWS ONLY
我现在需要更改此语句以更新 tableA 并设置字段 SPRTXT01 = '0/9',但前提是 tableB.SRVRSP= 'SUCCESSFUL' 即来自 tableB 的最新记录具有 'SUCCESSFUL' 响应。
但我不知道如何正确格式化此语句。 有人可以帮忙吗?
我试过下面的方法,但这更新了表中的所有行
UPDATE library1/tableA
SET tableA.SPRTXT01 = '0/9'
Where exists (
Select '1'
FROM library1/tableA
JOIN library1/tableB on
tableB.PRDCOD = tableA.NPROD
WHERE tableB.PRDCOD = '5520' and tableB.SRVRSP = 'SUCCESSFUL'
and tableA.SPRTXT01 <> '0/1'
ORDER BY tableB.timstp DESC FETCH NEXT 1 ROWS ONLY)
而且我认为它没有正确应用选择,即不是从表 B 选择最新记录然后应用 RVSRP = 'SUCCESSFUL' 检查,它只是选择表 B 的最新记录,其中 SRVSRP = 'SUCCESSFUL'。
谢谢
试试这个:
CREATE TABLE tableA (NPROD VARCHAR (10), SPRTXT01 VARCHAR (3));
CREATE TABLE tableB (PRDCOD VARCHAR (10), SRVRSP VARCHAR (20), timstp TIMESTAMP);
INSERT INTO tableA (NPROD, SPRTXT01)
VALUES ('5520', ''), ('XXXX', '');
INSERT INTO tableB (PRDCOD, SRVRSP, timstp)
VALUES
('5520', 'SUCCESSFUL', CURRENT TIMESTAMP)
, ('5520', 'UNSUCCESSFUL', CURRENT TIMESTAMP + 1 SECOND)
-- Comment out the next row to make it NOT update the SPRTXT01 column
, ('5520', 'SUCCESSFUL', CURRENT TIMESTAMP + 2 SECOND)
;
UPDATE tableA
SET tableA.SPRTXT01 = '0/9'
Where tableA.NPROD = '5520' AND tableA.SPRTXT01 <> '0/9'
AND exists
(
SELECT 1
FROM tableB
JOIN (SELECT PRDCOD, MAX (timstp) AS timstp FROM tableB GROUP BY PRDCOD) G
ON (G.PRDCOD, G.timstp) = (tableB.PRDCOD, tableB.timstp)
WHERE tableB.PRDCOD = tableA.NPROD
AND tableB.SRVRSP = 'SUCCESSFUL'
);
SELECT * FROM tableA;
NPROD | SPRTXT01 |
---|---|
5520 | 0/9 |
XXXX |
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.