Как я могу удалить несколько строк таблицы MySql Apache в SQL? - PullRequest
0 голосов
/ 27 сентября 2018

Я использую последнюю версию XAMPP 2018 с MariaDB и Apache.

Я выполняю этот sql:

 DELETE FROM customer_info 
 WHERE id NOT IN (SELECT MIN(id) FROM `customer_info` GROUP BY `paypal_id`) ;

и получаю эту ошибку

 Error
 SQL query: 

 DELETE FROM customer_info WHERE id NOT IN (SELECT MIN(id) FROM `customer_info` GROUP BY `paypal_id`)
 MySQL said: Documentation

 #1093 - Table 'customer_info' is specified twice, both as a target for 'DELETE' and as a separate source for data

Я пробовал разные способы избавиться от дубликатов записей paypal_id, в том числе используя COUNT (*)> 1, который также возвращает ошибку.

Ответы [ 2 ]

0 голосов
/ 09 октября 2018

Если вы хотите удалить все, кроме первой строки или любого небольшого подмножества строк, вот более быстрый путь:

CREATE TABLE new LIKE real;
INSERT INTO new
    SELECT * FROM real WHERE ...;   -- see below
RENAME TABLE real TO old,
             new TO real;
DROP TABLE old;

В вашем случае:

SELECT * FROM real ORDER BY id LIMIT 1;
0 голосов
/ 27 сентября 2018

MySQL не позволяет вам DELETE и SELECT в одной таблице.

вы можете попробовать использовать подзапрос в NOT IN.

DELETE FROM customer_info 
 WHERE id NOT IN (
   SELECT ID FROM (
     SELECT MIN(id) Id
     FROM `customer_info` 
     GROUP BY `paypal_id`
   ) t1
 ) 

Посмотреть на БД Fiddle

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...