我有兩張表,分別稱為“daily”和“master”。每日表每天都會被截斷,但主表保存資料并且永遠不會被截斷。每天我都運行一個 SQL 腳本將 Daily 表資料與 Master 表合并,如下所示在存盤程序中:
UPDATE master
SET offset = COALESCE(offset 1, 0);
MERGE INTO master m
USING daily d
ON (m.id = d.id)
WHEN MATCHED THEN
UPDATE SET offset = 0
WHEN NOT MATCHED THEN
INSERT (id, col1, col2, col3, offset)
VALUES (d.id, d.col1, d.col2, d.col3, NULL);
這作業正常,但在 WHEN NOT MATCHED 子句中,我只需要從 Daily 插入最多 100 條記錄到 Master。我怎樣才能做到這一點?
uj5u.com熱心網友回復:
你可以使用:
MERGE INTO master m
USING (
SELECT *
FROM (
SELECT d.*,
m.ROWID AS rid,
ROW_NUMBER() OVER (
PARTITION BY CASE WHEN m.ROWID IS NULL
THEN 'Insert'
ELSE 'Update'
END
ORDER BY ROWNUM
) AS rn
FROM daily d
LEFT OUTER JOIN master m
ON (m.id = d.id)
)
WHERE rid IS NOT NULL -- Update all rows.
OR rn <= 100 -- Only insert 100 rows.
) d
ON (m.ROWID = d.rid) -- Use the ROWID psuedo-column to join.
WHEN MATCHED THEN
UPDATE SET offset = 0
WHEN NOT MATCHED THEN
INSERT (id, col1, col2, col3, offset)
VALUES (d.id, d.col1, d.col2, d.col3, NULL);
db<>在這里擺弄
uj5u.com熱心網友回復:
修改using子句使其成為子查詢,并限制其where子句中的行數。在我的示例中,我使用了最簡單的選項 - rownum,因為您沒有說明您想要哪100 行。
MERGE INTO master m
USING (SELECT *
FROM daily d
WHERE ROWNUM < 100) x
ON (m.id = x.id)
WHEN MATCHED
THEN
UPDATE SET offset = 0
WHEN NOT MATCHED
THEN
INSERT (id,
col1,
col2,
col3,
offset)
VALUES (x.id,
x.col1,
x.col2,
x.col3,
NULL);
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/354041.html
上一篇:種子作業無法決議構建用戶變數插件
下一篇:根據條件洗掉
