2017-08-04 84 views
0

酸在蜂巢性質列允許使用以下格式刪除表中的行:蜂巢刪除與複合主鍵

DELETE FROM table 
WHERE id IN (SELECT id FROM raw_table) 

但是,什麼是刪除行最好的解決方案時,primary_key是由若干列?

我曾嘗試與存在以下:

DELETE FROM table 
WHERE EXISTS (SELECT id1, id2 FROM raw_table 
       WHERE raw_table.id1 = table.id1 AND raw_table.id2 = table.id2) 

或者以下(連接所有列,不知道這是否是有效的):

DELETE FROM table 
WHERE CONCAT(id1, id2) IN (SELECT CONCAT(id1, id2) FROM raw_table) 

你有任何建議什麼是最好的解決方案?

回答

0

使用存在的解決方案是有效的。此外,您的解決方案串聯值是有效的,但取決於你會發現,你可以刪除你不希望數據中的值,例如

id1: 01 
id2: 1 

將要刪除的行用011,但它也匹配與

id1: 0 
id2: 11 

這不是預期的。我會建議在ID之間添加一個分隔符。

DELETE FROM table 
WHERE CONCAT(id1, id2) IN (SELECT CONCAT(CONCAT(id1,"-"), id2) FROM raw_table) 

兩種解決方案都應該映射器僅執行1作業和減少階段,因此執行計劃和性能應該是差不多了

商祺!

+0

非常感謝您的回答。我實際上是用第一種方法使用EXISTS,你認爲這會耗費更多時間嗎? –

+0

我只是編輯我的答案。 – hlagos