【问题标题】:How to find mysql duplicates in two mirrored columns如何在两个镜像列中查找 mysql 重复项
【发布时间】:2016-03-21 20:21:35
【问题描述】:

在 MySQL 数据库中,我有行。例如:

Varchar1    | Varchar2    
XXXXXXXXXX   YYYYYYYYYY   
YYYYYYYYYY   XXXXXXXXXX 
XXXXXXXXXX   CCCCCCCCCC
YYYYYYYYYY   AAAAAAAAAA
CCCCCCCCCC   AAAAAAAAAA   

如何在第 1 行和第 2 行中找到(并删除)重复项?

不应删除一行(1 或 2)。

【问题讨论】:

  • 为什么第 1 行和第 2 行重复?
  • 请给出真实示例...如果 id 不相关,请给出表的主键或允许在行之间区分的唯一索引。

标签: mysql duplicates mirror


【解决方案1】:
SELECT t1.id, t1.varchar1,t1.varchar2,t2.id, t2.varchar1,t2.varchar2
from yourtable t1, yourtable t2
where t1.id<>t2.id and t1.varchar1=t2.varchar2

试试这个,如果不起作用就回来:)

如果这会检索到您想要的数据,那么删除很容易:

DELETE from yourtable WHERE id in( SELECT t1.id from yourtable t1, yourtable t2
    where t1.id<>t2.id and t1.varchar1=t2.varchar2)

警告:仅当您不在生产环境中或确定自己在做什么或在事务中时才使用 DELETE(BEGIN...)

【讨论】:

  • 对不起。 id 仅用于示例。该字段不相关。两个主要字段是 Varchar1 和 Varchar2。如果我正在做类似HEX(Varchar1) &amp; HEX(Varchar2) as _hash 的事情。应该工作吗?
  • 您的解决方案不太正确。如果我删除了第 3 行和第 4 行,我不会这样做。
【解决方案2】:

解决了。 我已经将 BIGINT 值与 varchar1 和 varchar2 的哈希按位与相加。

ALTER TABLE t1 ADD COLUMN hex1 BIGINT UNSIGNED NOT NULL; ALTER TABLE t1 ADD COLUMN hex2 BIGINT UNSIGNED NOT NULL; ALTER TABLE t1 ADD COLUMN hex BIGINT UNSIGNED NOT NULL; UPDATE t1 SET hex1 = CONV(SUBSTRING(CAST(SHA(varchar1) AS CHAR), 1, 16), 16, 10), hex2 = CONV(SUBSTRING(CAST(SHA(varchar2) AS CHAR), 1, 16), 16, 10), hex = hex1&hex2; ALTER TABLE t1 DROP COLUMN hex1; ALTER TABLE t1 DROP COLUMN hex2;

并按十六进制列分组

SELECT t1.* GROUP BY hex;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-02
    • 2013-04-17
    • 2018-09-05
    • 1970-01-01
    • 2016-02-27
    • 1970-01-01
    相关资源
    最近更新 更多