繁体   English   中英

删除多个表中的重复SQL

Delete duplicates sql across multiple tables

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我正在尝试从数据跨多个表的数据库中删除重复数据。

我有3个表格:Person,Person_Address_Map和Address。 我想删除人员表中除一个以外的所有重复行,但我还想检查一下地址数据是否相同(但不要删除地址表中的任何行)。

我有以下删除我的人表中除一个重复条目外的所有条目的方法。

  DELETE
  FROM Person p
  WHERE EXISTS
    (SELECT 1 
    FROM Person temp
    Where p.name = temp.name AND
    p.id < temp.id);


 Person                    Person_Address_Map             Address
 | ID | Name | Age |       | Person_ID | Address_ID |     | ID | City | State |
 -------------------       --------------------------     ---------------------
 | 1  | Bob  |  20 |       |     1     |     1      |     | 1  | NYC  |  NY   | 
 | 2  | Bob  |  20 |       |     2     |     2      |     | 2  | NYC  |  NY   |
 | 3  | Jon  |  50 |       |     3     |     3      |     | 3  | LA   |  CA   | 
 | 4  | Jon  |  50 |       |     4     |     4      |     | 4  | SF   |  CA   |

现在,例如,我的地址表中有一个城市。 Person_Address_Map包含一个人员ID和地址ID。 如何更改此查询,以使其不仅检查Person的“名称”是否相等,而且还要检查其在“地址”表中映射到的“城市”是否相等? (不删除“地址”表中的任何数据)

删除并保留一个副本后,我希望在人员表中保留以下内容。 随着Person_Address_Map也被更新。

 Person                    Person_Address_Map             Address
 | ID | Name | Age |       | Person_ID | Address_ID |     | ID | City | State |
 -------------------       --------------------------     ---------------------
 | 1  | Bob  |  20 |       |     1     |     1      |     | 1  | NYC  |  NY   | 
                                                          | 2  | NYC  |  NY   |
 | 3  | Jon  |  50 |       |     3     |     3      |     | 3  | LA   |  CA   | 
 | 4  | Jon  |  50 |       |     4     |     4      |     | 4  | SF   |  CA   |
1 个回复

我想这应该工作,

DELETE
  FROM PERSON P
 WHERE EXISTS (SELECT 1
          FROM (WITH TABLE_ AS (SELECT P.ID,
                                       P.NAME,
                                       P.AGE,
                                       PERSON_ID,
                                       ADDRESS_ID,
                                       A.ID ADD_ID,
                                       A.CITY,
                                       A.STATE
                                  FROM PERSON             P,
                                       PERSON_ADDRESS_MAP PA,
                                       ADDRESS_           A
                                 WHERE P.ID = PA.PERSON_ID
                                   AND PA.ADDRESS_ID = A.ID)
                 SELECT A1.ID, TABLE_.NAME
                   FROM ADDRESS_ A1, TABLE_
                  WHERE TABLE_.ADD_ID != A1.ID
                    AND TABLE_.CITY = A1.CITY
                    AND TABLE_.STATE = A1.STATE) DELETABLE_
                  WHERE P.ID > DELETABLE_.ID
                    AND P.NAME = DELETABLE_.NAME
        );

这是我使用的表定义,

CREATE TABLE person (
         ID         NUMBER(5),
         NAME       VARCHAR2(15) ,
         AGE        NUMBER(3));
CREATE TABLE Person_Address_Map (
         Person_ID          NUMBER(5),
         Address_ID          NUMBER(5)
         );         
CREATE TABLE Address_ (
         ID         NUMBER(5),
         City        VARCHAR2(15) ,
         State        VARCHAR2(15));         

INSERT INTO person VALUES (1,'Bob',20);         
INSERT INTO person VALUES (2,'Bob',20);
INSERT INTO person VALUES (3,'Jon',50);
INSERT INTO person VALUES (4,'Jon',50);

INSERT INTO Person_Address_Map VALUES (1,1);
INSERT INTO Person_Address_Map VALUES (2,2);
INSERT INTO Person_Address_Map VALUES (3,3);
INSERT INTO Person_Address_Map VALUES (4,4);

INSERT INTO Address_ VALUES (1,'NYC','NY');
INSERT INTO Address_ VALUES (2,'NYC','NY');
INSERT INTO Address_ VALUES (3,'LA','CA');
INSERT INTO Address_ VALUES (4,'CA','CA');

我没有检查级联约束。.我想它应该不会给您带来任何问题。

2 如何根据多个字段删除SQL表中的重复项

我有一个游戏表,描述如下: 但是每场比赛在表中的某处都有重复的条目,因为每场比赛都在两支球队的赛程中。 是否有一个 sql 语句可以用来查看和删除基于相同日期、时间、hometeam_id、awayteam_id、locationcity 和 locationstate 字段的所有重复项? ...

4 SQL基于多个列删除同一表中的重复行

我有一个表“每月”,其中包含列“文件名”,“工作表名”,“项目”,“任务”,“所有者”,“小时数”,“百分比” 我想删除工作表名称,项目和任务以及所有者和小时数和百分比在两行之间相同时重复的行,只是文件名不同,所以我们删除第二行,并保留第一行。 例如: fil1和file2 ...

5 从 SQL 表中删除重复的对

我有一个表格示例,如下所示: 该表基本上有 2 个重复,即海得拉巴和班加罗尔之间的距离与孟买和德里之间的距离相同。 我想从我的表中删除这些重复项。 有没有办法用 SQL 做到这一点? ...

2019-12-04 12:00:27 1 76   sql
6 从多个表中删除SQL

我试图找出如何从SQL Server中的多个表中删除。 我有一个表只包含一个主键和三个外键用于我要删除的三个表。 另外三个表不包含任何外键。 存储过程具有一个参数,即来自其中一个表的特定主键。 我想从其他表中删除WHERE tableID = @tableID 。 表之间的约束 ...

7 Oracle PL / SQL - 如何删除SQL表中的多个重复记录?

我有表名TABLE1,包含重复记录,如下所示: 在这种情况下,我想删除所有重复的组合行,除了两个使用SQL或/通过PL / SQL,其中AMOUNT(10.00和2.00)。 此外,包含不同数量的重复记录可能超过两个,如下所示: 在上面的例子中,我只需要删除8条记录中的4条,其 ...

8 在SQL中删除表中的重复行

oracle 11g中对此结果的查询是什么 我在product_table中有一个表调用程序product_table。,我没有主键,并且有这些记录 我想要一个查询,它将删除除一条记录以外的所有重复值 意味着执行该查询后,我需要此结果 可以使用sql查询或子查询而不使 ...

9 在单个SQL中从多个表中删除

想寻求您的帮助,以从多个表中删除行。 表A)indexnum人的标题列 表B)indexnum职位状态的列 我想做的是从两个表中删除具有特定索引号的任何行,这将通过以下方式完成: 我可以在单个SQL中执行此操作吗? 我在其他问答中提出了使用INNER JOIN的建 ...

10 从SQL中的多个表中删除

您好,有人可以在这里帮我吗。 我想从多个表中删除。 我想从grupos删除id_grupo = 6 。 但是,当我删除它时,我想delete from gerir_posts where id_grupo = 6 。 但是从posts id_post = 4 ,那与gerir_p ...

2017-03-30 17:01:35 1 115   sql
暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM