gpt4 book ai didi

php - 删除 MySQL 数据库中的重复行

转载 作者:行者123 更新时间:2023-11-29 09:00:48 32 4
gpt4 key购买 nike

我有以下数据库

my_table [id,name,address,phone] 有很多条目,我想删除重复数据,其中任何重复的 phone 都会导致删除。

这是我的尝试,但显示错误

在我的 sql 文件中

CREATE TABLE `my_table` (
`id` int(10) NOT NULL default '0',
`name` varchar(255) NOT NULL default '',
`address` varchar(255) NOT NULL default '',
`phone` varchar(255) NOT NULL default '',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

INSERT INTO `my_table` VALUES (1, 'Albert', 'EGYPT', '202020');
INSERT INTO `my_table` VALUES (2, 'John', 'USA', '984731');
INSERT INTO `my_table` VALUES (3, 'Steve', 'Romabia', '202020');
INSERT INTO `my_table` VALUES (4, 'Albert', 'EGYPT', '343354');

非常清楚,id 1 和 3 的行具有相同的电话号码,然后将删除重复的内容,因此结果为

INSERT INTO `my_table` VALUES (1, 'Albert', 'EGYPT', '202020');
INSERT INTO `my_table` VALUES (2, 'John', 'USA', '984731');
INSERT INTO `my_table` VALUES (3, 'Albert', 'EGYPT', '343354');

我的尝试怎么样

我刚刚在 sql 文件中添加了以下内容

1-创建新表以获得不同

CREATE TABLE my_temp(id VARCHAR(10), name VARCHAR(255), address VARCHAR(255), phone VARCHAR(255));
INSERT INTO my_temp(id,name,address,phone) SELECT DISTINCT id,name,address,phone FROM my_table;

2-从真实表my_table中删除条目

DELETE FROM my_table;

3-将条目从my_tamp表返回到真实的my_table

INSERT INTO my_table(id,name,address,phone) SELECT id,name,address,phone FROM my_temp;

4-删除无用的表my_temp

DROP TABLE my_temp;

现在是我的问题

它仍然会向我显示相同的内容

INSERT INTO `my_table` VALUES (1, 'Albert', 'EGYPT', '202020');
INSERT INTO `my_table` VALUES (2, 'John', 'USA', '984731');
INSERT INTO `my_table` VALUES (3, 'Steve', 'Romabia', '202020');
INSERT INTO `my_table` VALUES (4, 'Albert', 'EGYPT', '343354');

因为它不会考虑不重复,因为它们的 id、name、address 不同

那么我如何调整我的方式,以便仅当手机中有重复项时才删除重复项,而不关心 ID、姓名、地址是否不同

提示

我已经调整了这部分

INSERT INTO my_temp(id,name,address,phone) SELECT DISTINCT phone FROM my_table;

但它会插入到 my_temp 表中

INSERT INTO `my_table` VALUES (1, 'null', 'null', '202020');
INSERT INTO `my_table` VALUES (2, 'null', 'null', '984731');
INSERT INTO `my_table` VALUES (3, 'null', 'null', '343354');

所以我无法将数据返回到my_table

最佳答案

我会按照以下方式进行:

  1. 从现有表创建临时表:

    CREATE TEMPORARY TABLE data_to_keep LIKE table_with_dupes_in_it
  2. 仅使用您想要的记录填充临时表:

    INSERT INTO data_to_keep
    SELECT DISTINCT * FROM table_with_dupes_in_it
  3. 清空表格

    TRUNCATE TABLE table_with_dupes_in_it
  4. 将临时表中的数据返回到原始表

    INSERT INTO table_with_dupes_in_it
    SELECT * FROM data_to_keep;
  5. 清理

    DROP TEMPORARY TABLE data_to_keep

请注意,如果相关表是一个大的。如果它是一个大表,我倾向于使用真实表而不是临时表,以免占用数据库服务器上的过多内存。

编辑添加:

如果您只是担心部分重复(只有部分数据与先前输入的数据相同的行),那么您将需要使用 GROUP BY。当您使用 GROUP BY 时,您可以限制 MySQL 仅返回包含给定数据的一行,而不是全部。

SELECT *
FROM table
GROUP BY column_name

您还应该考虑在不希望保存重复数据的列上使用 UNIQUE 索引,这将阻止用户首先插入重复数据。

关于php - 删除 MySQL 数据库中的重复行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8678732/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com