t1
-列:title
,story
t2
-列:title
,story
两个表之间有些行重复,即title
和story
的值相同。
需要从t2
删除该行,并将其余行从t2
移到t1
;
有帮助吗?
答案 0 :(得分:3)
首先从t2
中删除重复的记录:
DELETE
FROM t2
WHERE EXISTS (SELECT 1 FROM t1 WHERE t2.title = t1.title AND t2.story = t1.story);
最后,将唯一记录从t2
插入t1
:
INSERT INTO t1 (title, story)
SELECT title, story
FROM t2;
答案 1 :(得分:1)
-- 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;
答案 2 :(得分:0)
我看到问题被标记为mysql,我的答案使用linux命令行,vi和您选择的编程语言,但这是执行您想要的技术:
第1步-将t1和t2这两个表都排序为t1sorted和t2sorted;
步骤2-删除重复项-排序后(如果表未排序,则排序步骤不起作用,排序方向的升/降不相关),只需对每个表进行一次迭代,将当前行与上一行进行比较,然后跳过当前行如果与前一行相同则行;您可以编写一个简单的程序以您喜欢的语言(例如C)来执行此操作;输出到t1sorted_dupesremoved和t2sorted_dupesremoved;
第3步-现在,您可以找到t1sorted_dupesremoved中不存在t2sorted_dupesremoved中的哪些行,因此您可以将它们添加到t1sorted_dupesremoved中,如下所示:(假设linux命令行-grep \ <仅显示t1中不存在的t2中的行并在>之后将它们重定向到输出文件,请注意,如果存在,此输出文件将被覆盖):
diff t2sorted_dupesremoved t1sorted_dupesremoved | grep \< > t2lines_not_in_t1
第4步-现在,您需要使用喜欢的编辑器(例如vi)来编辑输出文件t2lines_not_in_t1,以删除diff在每行开头插入的<和多余的空格;那么您可以在t1的末尾将其连接起来,如下所示:
第5步-
cat t2lines_not_in_t1 >> t1sorted_dupesremoved
请注意使用double >>在t1的末尾添加t2-非常重要,单个>会覆盖t1!
第6步-现在您可以对已删除的t1sorted_dupes进行排序了!您将t1和t2中的每个唯一行的一个实例按一个文件的顺序排序;