2017-08-04 64 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