跳至內容
Astera Technology

兩間分店的單號及數量相同,UNION 會漏單嗎?

合併不同分店匯出時保留分店識別,不能把同號同額視為同一單。

下載完整個案資料及參考答案 ↓

先準備用來排查的資料

001 是每間分店自己的編號,East 及 West 同號同數量可以是兩張不同單。UNION 會去掉投影後一樣的行。保留來源範圍,獨立已接收紀錄用 UNION ALL,不按數值相同便當成重試重複。

以下完整建表及資料只在新的 SQLite 測試資料庫執行。全部紀錄均為假設,數量以件計,輸入的 cents 金額欄以貨幣的分存整數;計算後的平均數可能不足整分。小型例子的各表均完整列在預覽。

假設輸入:east_receipts
分店單號數量
0015
下載可編輯 CSV ↓
假設輸入:west_receipts
分店單號數量
0015
下載可編輯 CSV ↓
可直接執行的完整測試資料
CREATE TABLE east_receipts(local_id TEXT PRIMARY KEY,qty INTEGER);
CREATE TABLE west_receipts(local_id TEXT PRIMARY KEY,qty INTEGER);
INSERT INTO east_receipts VALUES ('001',5);
INSERT INTO west_receipts VALUES ('001',5);

重現錯誤結果,再核對更正

錯誤示範查詢:只用來重現問題
SELECT SUM(qty) AS total_qty FROM (SELECT local_id,qty FROM east_receipts UNION SELECT local_id,qty FROM west_receipts);
實際執行的錯誤示範結果
總數量
5
下載可編輯 CSV ↓
更正後的 SQLite 查詢
SELECT SUM(qty) AS total_qty FROM (SELECT 'East' AS branch,local_id,qty FROM east_receipts
UNION ALL SELECT 'West',local_id,qty FROM west_receipts);
更正查詢的實際結果
總數量
10
下載可編輯 CSV ↓

兩張各五件,應共十件;錯誤合併只剩五件。保留分店資料也方便逐張查核,不能只為總數吻合而補一個數字。

套用前先測邊界及資料範圍

West 再加入 002 的五件,總數變 15,兩張 West 單仍各自獨立。

邊界測試要另開新的假設資料庫,重做完整建表及資料,只套用以下改動,再執行更正查詢。測試改動不可用於正式系統。

新假設副本內的邊界改動
INSERT INTO west_receipts VALUES ('002',5);
改動後再執行更正查詢的實際結果
總數量
15
下載可編輯 CSV ↓

UNION ALL 未防止同一分店單重複匯入;上游仍須以分店加本地單號作固定識別。

以上錯誤、更正及邊界結果都已在 SQLite 執行,並與另行編寫的預期資料逐行核對。證據只適用於這組假設條件,未測其他資料庫、正式效能或你的現有資料結構。

相關資源