在一次DB2执行中完成内部连接和更新表

8mmmxcuj  于 2023-01-05  发布在  DB2
关注(0)|答案(1)|浏览(243)

我有两个表,如果列的值相同,我想更新table_2,然后应用与table1的内部连接。我想在一次执行中完成。
这里我有table1和table2,其中table2的item_2具有相同的值,status = 0。这里我想将其中一个状态更新为9。

table1
#|ID| ITEM_1   |Application
-+--+----------+------
1|1| item1     |   read       
2|2| item1     |   write
3|3| item1     |   learn
table2
#|ID| ITEM_2   |Description  |STATUS
-+--+---------+---------------------
1|10| item1    |   des1      | 0    
2|11| item1    |   des2      | 0
3|12| item1    |   des3      | 2

为了更新table2,我使用了lag()函数,然后与table1进行内部连接。
但是这里我需要执行两次,第一次用于更新,第二次用于内部连接,但是我希望一次执行。
第一个月

UPDATE
(
  SELECT 
    T2.*
  , lag(ITEM_2, 1, 0) over (order by ITEM_2 ASC) as C2
  FROM TABLE_2 T2 where T2.STATUS = 0
)
SET STATUS = 9
WHERE C2 = ITEM_2;

#|ID| ITEM_2   |Description  |STATUS
-+--+---------+---------------------
1|10| item1    |   des1      | 0    
2|11| item1    |   des2      | 9
3|12| item1    |   des3      | 2

inner join

select T1.ID, T1.ITEM_1, T1.Appliction, T2.ID, T2.ITEM_2, T2.Description, T2.STATUS
from TABLE_1 T1
INNER JOIN TABLE_2 T2 ON  T1.ITEM_1 = T2.ITEM_2
where T2.STATUS = 0

ID  | ITEM_1      | APPLICTION  | ID    | ITEM_2      | DESCRIPTION    | STATUS
1   | item1       | read        | 10    | item1       | des1           | 0
4sup72z8

4sup72z81#

WITH U AS 
(SELECT COUNT (1) AS DUMMY FROM NEW TABLE
  (UPDATE TABLE_2 A SET STATUS = 9 WHERE EXISTS 
    (SELECT 1 FROM TABLE_2 B WHERE B.ITEM_2 = A.ITEM_2 AND A.ID > B.ID AND A.STATUS = 0
    )))
select T1.ID, T1.ITEM_1, T1.Appliction, T2.ID, T2.ITEM_2, T2.Description, T2.STATUS 
  from TABLE_1 T1
Inner join TABLE_2 T2 ON  T1.ITEM_1 = T2.ITEM_2
where T2.STATUS = 0`

fiddle

相关问题