【问题标题】:Removing somewhat duplicate records in table using MySQL使用 MySQL 删除表中的一些重复记录
【发布时间】:2011-03-03 00:42:17
【问题描述】:

我有一张比较美国航线竞争力的表格。因此,表中的一些字段是 id、route_id1、route_id2、airline_id1、airline_id2、sources_airport_id 和 destination_airport_id。 该表是自加入由路由映射组成的路由表的结果。 但结果,该表有一些重复的记录。

例如,
路线 1 与路线 2 竞争,因为它们具有相同的 source_airport 和destination_airport 但不同的airline_id。但是我有两条记录将 route1 与 route2 和 route2 与 route1 进行比较。它们是相同的比较,只是排序不同。

我尝试通过自加入来获取重复项:
选择 t1.* FROM 路由 AS t1,路由 AS t2 WHERE t1.route_id1 = t2.route_id2 AND t1.route_id2 = t2.route_id1
但是这个查询只是在表中获得相同数量的记录。

如何去除“重复”数据?

提前致谢。

【问题讨论】:

    标签: mysql phpmyadmin


    【解决方案1】:

    问题是你没有条件将t1t2分开。首先你会得到重复的t1t2 被交换的地方。其次,如果任何行有route_id1 = route_id2,您也会在结果集中的t1t2 中获得这些行。

    解决这个问题的最简单方法是:

    SELECT t1.* FROM routes AS t1, routes AS t2 
    WHERE t1.route_id1 = t2.route_id2 AND t1.route_id2 = t2.route_id1
          AND t2.id > t1.id
    

    添加的标准是一行的 id 必须大于另一行。这意味着返回的t1 将始终是具有较低 id 的行。您当然可以将其替换为

    这将消除大部分重复项。如果您在数据库中也有适当的重复项,则会在上述查询的结果集中创建一些重复的行。原因是“重复”可能会被检测为两个不同对应行的“重复”,而这两个行又是彼此的实际重复。

    【讨论】:

      【解决方案2】:

      在选择中使用字段的实际名称并使用 DISTINCT 子句而不是使用 t1.* 。 在字段列表中确保您不包含航空公司 ID,因为它们是不同的,它们会使您的记录不重复。

      【讨论】:

        【解决方案3】:

        您是否尝试过使用“SELECT DISTINCT t1.* FROM ...”?

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-09-17
          • 1970-01-01
          • 1970-01-01
          • 2013-02-07
          • 2014-04-04
          相关资源
          最近更新 更多