Mysql 删除两个表之间的重复行

Mysql 删除两个表之间的重复行,mysql,Mysql,t1-哥伦布:标题、故事 t2-哥伦布:标题、故事 某些行在两个表之间重复,即标题和故事值相同 需要从t2中删除该行,并将其余行从t2移动到t1 有什么帮助吗?首先从t2中删除重复记录: 最后,将唯一记录从t2插入t1: 首先从t2中删除重复记录: 最后,将唯一记录从t2插入t1: 我看到问题被标记为mysql,我的答案使用linux命令行、vi和您选择的编程语言,但下面是实现您所需的技术: 步骤1-将两个表t1和t2排序为t1sorted和t2sorted 步骤2-删除重复项-一次排序如果表未

t1-哥伦布:标题、故事 t2-哥伦布:标题、故事

某些行在两个表之间重复,即标题和故事值相同

需要从t2中删除该行,并将其余行从t2移动到t1


有什么帮助吗?

首先从t2中删除重复记录:

最后,将唯一记录从t2插入t1:


首先从t2中删除重复记录:

最后,将唯一记录从t2插入t1:


我看到问题被标记为mysql,我的答案使用linux命令行、vi和您选择的编程语言,但下面是实现您所需的技术:

步骤1-将两个表t1和t2排序为t1sorted和t2sorted

步骤2-删除重复项-一次排序如果表未排序,则该步骤不起作用,排序方向升序/降序不相关,只需在每个表中迭代一次,将当前行与前一行进行比较,如果与前一行相同,则跳过当前行;您可以编写一个简单的程序,用您最喜欢的语言(如C)来实现这一点;输出到t1sorted_dupesremoved和t2sorted_dupesremoved

步骤3-现在您可以找到t2sorted_dupesremoved中的哪些行在t1sorted_dupesremoved中不存在,这样您就可以将它们添加到t1sorted_dupesremoved中,如下所示:假设linux命令行-grep\<只显示t2中t1中不存在的行,并且它们在>之后被重定向到输出文件中请注意,此输出文件将被删除如果存在,则覆盖:

diff t2sorted_dupesremoved t1sorted_dupesremoved | grep \< > t2lines_not_in_t1
请注意,在t1末尾添加t2的双>>非常重要,一个>将覆盖t1


第6步-现在您可以对t1sorted_dupesremoved进行排序,您就完成了!在一个文件中,t1和t2中的每个唯一行都有一个实例,按排序顺序排列

我看到问题被标记为mysql,我的答案使用linux命令行、vi和您选择的编程语言,但下面是实现您所需的技术:

步骤1-将两个表t1和t2排序为t1sorted和t2sorted

步骤2-删除重复项-一次排序如果表未排序,则该步骤不起作用,排序方向升序/降序不相关,只需在每个表中迭代一次,将当前行与前一行进行比较,如果与前一行相同,则跳过当前行;您可以编写一个简单的程序,用您最喜欢的语言(如C)来实现这一点;输出到t1sorted_dupesremoved和t2sorted_dupesremoved

步骤3-现在您可以找到t2sorted_dupesremoved中的哪些行在t1sorted_dupesremoved中不存在,这样您就可以将它们添加到t1sorted_dupesremoved中,如下所示:假设linux命令行-grep\<只显示t2中t1中不存在的行,并且它们在>之后被重定向到输出文件中请注意,此输出文件将被删除如果存在,则覆盖:

diff t2sorted_dupesremoved t1sorted_dupesremoved | grep \< > t2lines_not_in_t1
请注意,在t1末尾添加t2的双>>非常重要,一个>将覆盖t1

第6步-现在您可以对t1sorted_dupesremoved进行排序,您就完成了!在一个文件中,t1和t2中的每个唯一行都有一个实例,按排序顺序排列

-- Create temporary table
CREATE TABLE temp_t LIKE t1;

-- Add constraint
ALTER TABLE temp_t ADD UNIQUE(title, story);

-- Copy data
INSERT IGNORE INTO temp_t SELECT * FROM t1;
INSERT IGNORE INTO temp_t SELECT * FROM t2;

-- copy back and drop temp ( if you dont want these constraints on t1 table)
TRUNCATE TABLE t1;
INSERT INTO t1 SELECT * FROM temp_t;
DROP TABLE temp_t;

-- rename and drop ( if you want these constraints on t1 table)
RENAME TABLE t1 TO old_t1, temp_t TO t1;
DROP TABLE old_t1;
diff t2sorted_dupesremoved t1sorted_dupesremoved | grep \< > t2lines_not_in_t1
cat t2lines_not_in_t1 >> t1sorted_dupesremoved