将两个不同的表连接并删除重复项

4
我是一名能够翻译文本的助手。

我完全不懂SQL查询。我有两个表:

表1:

id_s  name   post_code     city     subject
------------------------------------------
1     name1  postal1    city1    subject1
2     name2  postal2    city2    subject2
3     name3  postal3    city3    subject3
4     name4  postal4    city4    subject4
...
~350
id_p  name   post_code     city     subject
------------------------------------------
1     name1  postal1    city1    subject1
2     name2  postal2    city2    subject2
3     name3  postal3    city3    subject3
4     name4  postal4    city4    subject4 
...
~1200

我希望将两个表格合并,并删除姓名和邮政编码相同的条目。我找到了一些关于如何做到这一点的答案,但它们太复杂了。


1
我认为你想要使用 UNION。你想得到什么样的输出? - John Woo
3个回答

7

您可以使用UNION子句,UNION将检查重复项,并仅返回不同的行。

SELECT * FROM table1
UNION
SELECT * FROM Table2

编辑:为了存储两个表中的数据而不重复,请执行以下操作。
INSERT INTO TABLE1
SELECT * FROM TABLE2 A
WHERE NOT EXISTS (SELECT 1 FROM TABLE1 X 
                  WHERE A.NAME = X.NAME AND 
                  A.post_code = x.post_code)

这将插入来自table2的行,这些行与table1中的名称和邮政编码不匹配。
另一种选择是创建新表,而不触及table1和table2。
CREATE TABLE TABLENAME AS
SELECT * FROM table1
UNION
SELECT * FROM Table2

这将仅返回数据,不会更改底层表中的任何内容。您要直接在表中删除行吗? - rs.
@chris 当你执行 SELECT 命令时,你只是从你的表中读取数据,不会有任何数据被破坏。 - Saju
哦,我忘记写了。我的输出将是创建一个大表格,如果我删除任何表格或保留它们都不重要。 - Chris
@rs。也许使用CREATE TABLE new_table_name AS SELECT ...会更好? - Ihor Romanchenko
@IgorRomanchenko,是的,我不确定OP是否想要新表。 - rs.
显示剩余3条评论

1
您可以像这样执行一个 SELECT INTO 命令。
SELECT * INTO newtable FROM table1
UNION
SELECT * FROM table2;

这将从table1和table2创建一个新表,不包含任何重复项。


0

试试这个简单的:

(select * from table1 MINUS select * from table2)
UNION
(select * from table2 MINUS select * from table1)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接