【问题标题】:How can I delete multiple MySql Apache table rows in SQL?如何在 SQL 中删除多个 MySql Apache 表行?
【发布时间】:2019-03-02 17:52:25
【问题描述】:

我正在使用最新版本的 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 也会返回错误。

【问题讨论】:

标签: mysql sql xampp mariadb


【解决方案1】:

MySQL 不允许您将DELETESELECT 在同一个表中。

您可以尝试在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
 ) 

View on DB Fiddle

【讨论】:

  • ID 列是唯一的,没有重复,因为它在 Auto_Increment 上
【解决方案2】:

如果您想删除除第一行以外的所有行,或行的任何小子集,这里有一个更快的方法:

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;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-03
    • 1970-01-01
    • 2021-04-07
    • 1970-01-01
    • 2014-02-26
    相关资源
    最近更新 更多