2015-03-08 4 views
0

Я написал инструкцию sql, чтобы сохранить только один экземпляр (минимальный id), где есть дублированные product_codes. Вопрос заключается в том, что оператор очень неэффективно и принимает абсолютно возрастов, чтобы бежать, поэтому я надеюсь, что есть более эффективный способ, чтобы написать егоSQL для удаления дублированных строк

набор данных структурирована:

id product_code cat_desc  product_desc 
1 2352345  423   COCA COLA 
2 8967896  457   FANTA 
3 6456466  435   SPARKLING WATER 
4 3562314  457   STILL WATER 

заявление является :

DELETE 
FROM raw_products_inter 
WHERE id IN (SELECT id 
      FROM raw_products_inter outer_table 
      WHERE product_code IN (SELECT product_code 
            FROM raw_products_inter 
            GROUP BY 1 
            HAVING COUNT(id) > 1) 
      AND id NOT IN (SELECT MIN(id) 
           FROM raw_products_inter inner_table 
           WHERE inner_table.product_code = outer_table.product_code)) 

ответ

1

Вы должны быть в состоянии повысить производительность используя СУЩЕСТВУЕТ условие:

DELETE 
    FROM raw_products_inter P 
WHERE EXISTS (
      SELECT * 
      FROM raw_products_inter OP 
      WHERE OP.product_code = P.product_code 
      AND OP.id < P.id 
     ) 
+0

каких элегантное решение, спасибо. мой первоначальный запрос, который я должен был убить после часа работы, и это заработало через 5 секунд :) –

Смежные вопросы