【问题标题】:join two different tables and remove duplicated entries加入两个不同的表并删除重复的条目
【发布时间】:2017-12-25 18:50:32
【问题描述】:

我是 sql 查询的新手。我有两张桌子:

table1:

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

table2:

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

我想加入这两个表,并删除具有相同名称和邮政编码的条目。我找到了一些关于如何做到这一点的答案,但它们太复杂了。

【问题讨论】:

  • 我想你想要UNION。你想要的输出是什么?

标签: sql postgresql


【解决方案1】:

您可以使用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

【讨论】:

  • 谢谢。顺便提一句。当表的列数不同时它会起作用吗?
  • 好的。在我使用它之前,我需要知道它是否会破坏表2并且表1会变成一张大混合表?
  • 这将只返回数据并且不会更改基础表中的任何内容。是否要直接删除表中的行?
  • @chris 当你发出SELECT 命令时,你只是从你的表中读取,没有任何东西被破坏。
  • 哦,我忘记写了。我的输出是创建一个大表,我是否删除任何表或保留它们并不重要
【解决方案2】:

你可以像这样给出SELECT INTO 命令

SELECT * INTO newtable FROM table1
UNION
SELECT * FROM table2;

这将从 table1 和 table2 创建一个没有任何重复的新表

【讨论】:

    【解决方案3】:

    试试这个简单的:

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

    【讨论】:

      猜你喜欢
      • 2021-10-20
      • 2021-05-27
      • 1970-01-01
      • 1970-01-01
      • 2013-03-09
      • 1970-01-01
      • 1970-01-01
      • 2010-11-22
      • 1970-01-01
      相关资源
      最近更新 更多