减少mysql数据库以消除重复

时间:2015-12-21 14:11:16

标签: mysql

我有一张名为" lane"具有以下属性。

Private Sub Worksheet_Change(ByVal Target As Range)
 Dim streng As String
 Dim k As Long
 Dim r As Long

 k = Target.Column
 r = Target.Row


 If Cells(1, k) = "P" Then
  If Cells(r, k) = "x" Then
   Cells(r, 4) = "x"
   Else
   Cells(r, 4) = ""
  End If
 End If

End Sub

以下列的此表中有重复的行:origState,origRegion,destState,destRegion。我希望能够选择所有行JOINED到第一次出现的min(id)。

例如,数据:

1 ALL MA ALL OH
2 ALL MA ALL OH
3 ALL MA ALL OH

和类似的SQL(错过了所有重复的行):

CREATE TABLE `lane` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `origRegion` varchar(45) NOT NULL,
  `origState` char(2) NOT NULL,
  `destRegion` varchar(45) NOT NULL,
  `destState` char(2) NOT NULL
  PRIMARY KEY (`id`)
) 

结果(注意最后的count和minId):

1 ALL MA ALL OH 3 1
2 ALL MA ALL OH 3 1
3 ALL MA ALL OH 3 1

请注意,上面使用的查询是对解here的修改(在这种情况下不起作用)

2 个答案:

答案 0 :(得分:1)

您可以运行此查询以从数据库中删除所有重复的行: -

ALTER IGNORE TABLE `lane`
ADD UNIQUE INDEX (`origRegion`, `origState`, `destRegion`, `destState`);

这将为您的表添加唯一索引并删除所有正常的行,并确保将来不会插入重复的行。

答案 1 :(得分:1)

圣诞快乐!!!

SELECT ID, 
       origRegion, 
       origState, 
       destRegion, 
       destState,
       (SELECT COUNT(*)
        FROM Lane l3
        WHERE l.origRegion = l3.origRegion
        and l.origState = l3.origState
        and l.destRegion = l3.destRegion
        and l.destState = l3.destState) as 'Count', 
       (SELEcT MIN(ID) 
        FROM Lane l2 
        WHERE l.origRegion = l2.origRegion
        and l.origState = l2.origState
        and l.destRegion = l2.destRegion
        and l.destState = l2.destState) as minID
FROM lane l