从mysql中选择类似的记录

时间:2016-04-24 09:25:56

标签: mysql sql database stored-procedures

我有一个如下所示的数据库

ID    color number          code
102966  red 1   9f6606069f9b999b
102968  red 1   9f6606069f9b999b
102967  red 1   9f0606069f9f9f9f
102969  red 1   9f0606069f9f9f9f
103630  red 1   bbff9f0f8fdc9f7e
101582  red 1   bbff9b0fcf9f99d9
102000  red 1   99fd9f0fab999fff
101603  red 1   bbff9f0d8f9d96df
102016  red 1   bbff9900c09999df

此表包含超过4000个条目。 我使用

得到了这个输出
Select * from mytable order by code asc

现在我希望输出为Id-Id-Id ....其中代码类似。 所以对于给定的片段,它应该像

102966-102968
102967-102969

所以我想要那些记录是相似的,他们的代码应该是这样的。 请帮忙。

2 个答案:

答案 0 :(得分:3)

我真的没看到你的最后一行结果是什么,可能是一个错误,或者我不明白你需要什么

我认为您正在寻找group_concat

select group_concat(ID ORDER BY ID SEPARATOR '-' ) AS dup
from mytable
GROUP BY code
HAvING count(*) >1
ORDER BY dup    

结果:

|           dup |
|---------------|
| 102966-102968 |
| 102967-102969 |

group_concat显示与GROUP BY匹配的所有值,此处显示ID值。 术语SEPARATOR用于指定-作为ID之间的分隔符,因为默认分隔符为,

如果您想要所有行,即使那些没有重复code的行,请删除having子句

SQL Fiddle

答案 1 :(得分:0)

来自@Thomas G的最后一个答案是正确的,但是如果你想按照正确的顺序使用它:

select CONCAT(MIN(ID),'-',MAX(ID))
from mytable
GROUP BY code
HAvING count(*) >1