如何在 SQL 中删除多个 MySql Apache 表行?
Posted
技术标签:
【中文标题】如何在 SQL 中删除多个 MySql Apache 表行?【英文标题】:How can I delete multiple MySql Apache table rows in SQL? 【发布时间】: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 也会返回错误。
【问题讨论】:
1093 Error in MySQL table is specified twice的可能重复 【参考方案1】: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
)
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;
【讨论】:
以上是关于如何在 SQL 中删除多个 MySql Apache 表行?的主要内容,如果未能解决你的问题,请参考以下文章