2010-06-25 161 views
0

基本上我創建了一個彙總表。Mysql重複鍵/刪除

問題是有時主表中的數據會被手動修改。我正在使用ON DUPLICATE KEY UPDATE,但是我也需要像ON MISSING KEY DELETE之類的東西。摘要需要更新爲已更改的數據。

最簡單的方法是刪除所有摘要記錄並重新運行INSERT SELECT查詢嗎?這似乎不是一個好主意。

不在選擇查詢中的任何鍵不應位於彙總表中。

+0

ON MISSING KEY DELETE沒有任何意義......如何刪除那些不在那裏的東西? – simendsjo 2010-06-25 17:54:58

+0

@ Bill Karwin:對,我發佈了Coffee Coffee(tm)之前。 – 2010-06-25 18:20:26

回答

1

你填充summary_table後,當你可能會考慮使用觸發器,加1,你可以這樣做:

DELETE s FROM summary_table s LEFT OUTER JOIN original_table o ON s.id = o.id 
WHERE o.id IS NULL; 

將從summary_table任何行刪除,其中id不再存在於original_table中。

我不認爲你有任何辦法可以在一個聲明中做到這一點。

+0

啊,這更像是它。唯一的問題是它的選擇插入,所以我不得不在這一點上工作,但它絕對是正確的方向。謝謝! – jwzk 2010-06-25 18:08:39

+0

是的,連接條件可能需要比我在此處展示的示例更復雜。 – 2010-06-25 18:20:36

0

我不知道我理解,但它聽起來像你想觸發對INSERT和UPDATE主表添加到總結,並刪除另一個觸發從彙總中減去...

0

如果摘要查詢速度快且變化不定,您可以重新運行摘要。所以你在刪除時刪除1插入等