mysql - 当 substr 大于 1 时获取列的所有实例

标签 mysql

好吧,我已经有了一个唯一的标识符,并且在某一时刻,这些标识符以及随之而来的行都被克隆了。

为了保留这些行(其中一些是合法的),我们去掉了给定 ID 的最后 3 个字符,并为其添加了三个新字符。

我想获取由多个截断 ID 标识的所有唯一标识符 - 例如:

ID 1:

123456789

ID 2:

123456888

我想查看子字符串(在本例中为 123456),并获取包含它的两个值。

这是我目前拥有的:

select substr(uuid, 1, 33) as substring, uuid 
from node 
where uuid like concat('', substr(uuid, 1, 33), '%') 
and count(substr(uuid, 1, 33)) > 1

但是我得到“组功能的无效使用”。我应该使用group byhaving 吗?在这种情况下我将如何正确使用它们?

我的目标是获取 uuid 字段中多次具有给定 uuid 字段子字符串的每一项。

因此,任何包含另一个 uuid 所包含的给定字符串的 uuid(即 uuid 中存在重复的子字符串)都应该被拉出并显示。

例如,此查询为我提供了包含我想要的 uuid 的子字符串,但它没有为我提供 uuid 本身:

select substr(uuid, 1, 33) as substring, uuid from node where uuid like concat('', substr(uuid, 1, 33), '%') group by substring having count(substring) > 1

我想要与子字符串关联的 uuid,如下所示:

子字符串:

0e3c1fef-3958-436b-8e2b-0c6f7b7be

uuid:

0e3c1fef-3958-436b-8e2b-0c6f7b7be212

0e3c1fef-3958-436b-8e2b-0c6f7b7be075

0e3c1fef-3958-436b-8e2b-0c6f7b7be981

基本上所有 uuid 都与子字符串的多个实例关联。

该特定子字符串的计数为 3。

最佳答案

聚合函数不能在 WHERE 子句中使用,只能在 HAVING 中使用。

SELECT uuid
FROM node
WHERE SUBSTR(uuid, 1, 33) IN (
    SELECT substr(uuid, 1, 33) as substring
    FROM node
    GROUP BY substring
    HAVING COUNT(*) > 1
)

另一种可能更好地使用索引的编写方法是:

SELECT uuid
FROM node AS n
JOIN (SELECT CONCAT(SUBSTR(uuid, 1, 33), '%') AS pattern
      FROM node
      GROUP BY pattern
      HAVING COUNT(*) > 1) AS p
ON n.uuid LIKE p.pattern

关于mysql - 当 substr 大于 1 时获取列的所有实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24395146/

相关文章:

php - 通知: unserialize(): Error at offset | data trimmed in MySQL

mysql - sql 查询返回太多结果和重复项

mysql - 使用动态事件名称创建 MySQL 事件

mysql - VB - SQL 致命内部连接错误 - 已关闭

php - 发送搜索查询后页面变为空白

php - SQL查询在数据库中运行,但在PHP中显示 "undefined index"

mysql - 如何检查一个字段中的字符串是否存在于逗号分隔字段的每个元素中

java - MySQL 数据库表未更新

mysql - 替换Order By中的条件子查询(性能考虑)

mysql - 获取复杂查询的计数结果