我有两个表,它们会在ID列中存储相同的键:
CREATE TABLE "TESTA"
( "RECORD_STATUS" VARCHAR2(4 BYTE),
"ID" NUMBER, --this is PK
"BATCH" NUMBER
);
CREATE TABLE "TESTB"
( "ID" NUMBER, --this is unique FK to TESTA.ID
"BATCH" NUMBER);
我在这些测试表中插入了大约20个测试记录。
要求:使用ID
加入两个表,使用TESTA.RECORD_STATUS DESC
排序,然后每5行以递增1(从0开始)更新BATCH
列。
这是我到目前为止所做的:
MERGE INTO TESTB st
USING(SELECT A.rowid as rid,
ROW_NUMBER() OVER (ORDER BY A.RECORD_STATUS DESC) as rn
FROM TESTA A) t
ON(st.ROWID=t.RID)
WHEN MATCHED THEN
UPDATE SET st.BATCH=CEIL(t.rn/5);
问题:输出表示合并了0行,但我希望所有行都要更新。
我非常感谢有关如何实现预期的一些见解。我希望我没有错过任何东西。
答案 0 :(得分:1)
您可以使用update
:
update testb
set b.batch = (select trunc((seqnum - 1) / 5)
from (select a.*, row_number() over (order by a.record_status desc) as seqnum
from testa
) a
where a.id = testb.id and
)
where exists (select 1 from testa a where a.id = testb.id);