如何使用MySQL“LIKE”显示重复的行?

时间:2012-03-22 12:35:32

标签: mysql sql-like

我的表格包含以下结构和测试记录:

+--------+--------+---------+
| vid    | number | name    |
+--------+--------+---------+
| 2      | 012345 | name1   | r1
| 6      | 0012345| 1name   | r2
| 5      | 012345 | namee   | r3
| 6      | 9111522| name6   | r4
| 3      | 999999 | name65  | r5
| 2      | 0999999| name64  | r6
+--------+--------+---------+

行r1,r2和r3是重复的,因为12345在字段编号内部,r5和r6是重复的。 我想在此表中显示重复的行。

我必须创建什么查询才能获得此结果?

提前致谢!

2 个答案:

答案 0 :(得分:2)

看起来您将“数字”列存储为字符串(VARCHAR)。如果是这种情况,我强烈建议您将其切换为INT列类型。如果那是不可能的,那么我会确保你的应用程序正常化数据,因此字符串格式的数字始终采用相同的格式。它会让生活更轻松。

无论如何,根据那里的数据,假设重复意味着“数据的数字表示是相同的”,那么这将起作用

SELECT
  t1.vid, t1.number, t1.name
FROM table t1
  INNER JOIN table t2
  ON CAST(t1.number AS SIGNED)=CAST(t2.number AS SIGNED) AND t1.vid!=t2.vid
GROUP BY t1.vid

答案 1 :(得分:1)

尝试以下查询,但不限制您使用特定模式。在Michaels中添加regexp,回答WHERE子句,以便按模式分组。

SELECT
    t1.id, t1.number, t1.name
FROM table t1
LEFT OUTER JOIN table t2
ON t1.number LIKE CONCAT('%', t2.number, '%')
GROUP BY t1.id
HAVING COUNT(*) > 1

<强>更新 通过将CAST签名函数添加到上述查询中,我们可以删除所有前导0个条目。

SELECT
    t1.id, t1.number, t1.name
FROM table t1
LEFT OUTER JOIN table t2
ON t1.number LIKE CONCAT('%', CAST(t2.number AS SIGNED), '%')
GROUP BY t1.id
HAVING COUNT(*) > 1

以下是MYSQL小提琴的链接,演示了对样本数据的查询:http://sqlfiddle.com/#!2/4deee/2