兩個無任何共同屬性的數據源 (平面文件/表),需按行順序一一配對合併。常見方案:為每個來源生成 ROWNUM 作為虛擬鍵關聯。
SELECT *
FROM (SELECT a.*, ROWNUM AS rn_a FROM Table_A a) A
JOIN (SELECT b.*, ROWNUM AS rn_b FROM Table_B b) B
ON A.rn_a = B.rn_b;
測試數據:Table_A (1~1,000,000)、Table_B (1,000,001~2,000,000)。理想配對應為 (1,1000001)、(2,1000002)…
原因:ROWNUM 反映查詢輸出順序,非物理存儲順序。Oracle 讀取塊的順序受 High Water Mark、Free List、並行掃描等影響,不保證與插入順序一致。
ORDER BY 強制排序更慢,且仍無法保證與另一源同步。ROW_NUMBER() OVER (ORDER BY business_key))。SEQ.NEXTVAL 寫入鍵列。嚴禁在生產環境依賴 ROWNUM 進行跨源行配對。該方法僅適合臨時分析、數據量小、順序不敏感的探查場景。