我有權訪問我們每天從雲服務中檢索並存儲在MySQL數據庫中的報表數據集(我無法控制),以運行高級報告和本地與第三方數據可視化軟件相結合的報告。如何將自動遞增值附加到重複值?
數據通常在id字段上具有重複值,這些值在與其他表進行數據分析時會產生問題。
例如:
+-------------+----------+------------+----------+
| workfile_id | zip_code | date | total |
+-------------+----------+------------+----------+
| 78002 | 90210 | 2016-11-11 | 2010.023 |
| 78002 | 90210 | 2016-12-22 | 427.132 |
+-------------+----------+------------+----------+
Workfile_id是重複的,因爲這是同樣的工作,但在工作中更多的工作在不同的月份比原來的工作進行。而不是爲作業創建另一個工作文件標識的軟件,而是使用相同的工作文件標識。
做與workfile_id其他表的連接是有問題的,當同一個ID的一個以上存在,所以我想知道是否可以做兩件事情之一:
- 請重複workfile_id獨特。當找到重複項時,讓sql將數字附加到工作文件ID。第一次重複(或第二次出現相同的工作文件ID)將需要在工作文件ID末尾附加.01。然後,如果插入了另一個副本,它將需要自動遞增附加數字,例如0.02,以此類推,隨後重複使用workfile_id。這種方法最適合我們的數據,但我很好奇,從性能的角度來看,這對服務器來說有多困難。如果我可以安排在插入數據後進行更改以加速初始數據插入,那將是理想的。
- 總計列數和移除重複的workfile_id行。有一個任務標識重複的workfile_ids並彙總重複項的財務列,用新的總和替換原始總數,並在列合併後刪除「新行」。 從數據保存的角度來看,這比較麻煩,但如果第一個解決方案不可行,則可以接受。
我的假設是,會有讓服務器比較新workfile_id值,每一次數據插入現有的所有worlfile_id值顯著的開銷,但我們的數據是小,新的數據只能每天插入一次,在1 :上午30點,並且保留重複的workfile_id搜索插入最近6個月內的行也應該是可行的。
是發現複製在列(workfile_id)和附加一個自動遞增值到workfile_id可能?
編輯: 我很難讓我的觸發器基於sdsc81的答案工作。 任何想法?
DELIMITER //
CREATE TRIGGER append_subID_to_workfile_ID_salesjournal
AFTER INSERT
ON salesjournal FOR EACH ROW
BEGIN
SET @COUNTER = (SELECT (COUNT(*)-1) FROM salesjournal WHERE workfile_id = NEW.workfile_id);
IF @COUNTER > 1 THEN
UPDATE salesjournal SET workfile_id = CONCAT(workfile_id, @COUNTER) WHERE id = NEW.id;
END IF;
END;//
DELIMITER ;
很難知道觸發器是否完全不工作,或者只是觸發器中的代碼不工作。我在插入時沒有錯誤。有什麼辦法可以調試觸發錯誤嗎?
如果您需要添加的值爲2位數,那麼您可以使用類似於SET @COUNTER = CONCAT('0',@COUNTER);'然後SET'@COUNTER = SUBSTR(@COUNTER, LENGTH(@COUNTER - 1));','UPDATE your_table ...'指令前。這很混亂,但應該做的伎倆。乾杯 – sdsc81
是的,如果我不清楚,我很抱歉。我完全控制目標數據庫。我不是交易所的數據庫管理員,所以我不清楚如何完成這樣的事情。我今天淹沒了,但我會盡快測試你的方法,並選擇它作爲正確的,如果它的工作。感謝您及時的回覆。 – tephlon
嗨!我正在仔細檢查,看到我糾正了查詢。順便問一下,表格中的所有字段都是?或者你有一個標識每行的unike * id *? (我的意思是,像一個自動增量值)。因爲這將需要正常工作。讓我知道。 – sdsc81