Mysql 通过忽略前两个字符,如何从下面的重复记录中获得唯一记录列表?

Mysql 通过忽略前两个字符,如何从下面的重复记录中获得唯一记录列表?,mysql,sql,Mysql,Sql,规则如下: 比较userId时,仅搜索以“AB”开头的userId及其匹配的重复项(除了“AB”)。然后,只返回上面的重复用户ID,在开始处有“AB”,就可以得到一个“unique userId”列表 对于返回的以“AB”开头的重复字符串,我们需要确保有“duplicate”;否则,我们不应返回0记录 我知道这听起来很混乱,请参见下面的示例: 包含10条记录的表用户名及其用户ID字段(10条记录)为: 运行查询后的所需结果: ABC1234 ABF1235 请注意:尽管ABY1236以“AB”

规则如下:

  • 比较userId时,仅搜索以“AB”开头的userId及其匹配的重复项(除了“AB”)。然后,只返回上面的重复用户ID,在开始处有“AB”,就可以得到一个“unique userId”列表

  • 对于返回的以“AB”开头的重复字符串,我们需要确保有“duplicate”;否则,我们不应返回0记录

  • 我知道这听起来很混乱,请参见下面的示例:

    包含10条记录的表用户名及其用户ID字段(10条记录)为:

    运行查询后的所需结果:

    ABC1234
    ABF1235
    
    请注意:尽管ABY1236以“AB”开头,但此记录不应在输出中返回,因为它没有类似Y1236的“重复”匹配(忽略前两个字符“AB”)

    下面我有一个示例查询,但它只返回了重复的记录,不以“AB”开头,还将返回ABY1236

     SELECT distinct  substr(userId , -(length(userID)-2))
      from  UserName where userId like 'AB%';
    

    谢谢你的帮助

    您可以使用EXISTS检查是否存在一个用户ID,该用户ID等于从3d字符开始的“AB…”的右部分:

    select u.userId from UserName u
    where 
      u.userId like 'AB_%'
      and
      exists (
        select 1 from UserName where userId = substr(u.userId, 3)
      )
    

    您可以尝试使用selct联接仅检查匹配结果

    SELECT substr(a.userId , -(length(a.userID)-2))
    from  UserName a
    INNER JOIN UserName  b ON a.substr(a.userId , -(length(a.userID)-2)) = b.UserId
            AND userId like 'AB%'
    

    包括@scaisEdge谢谢。抱歉之前的评论,我不完全理解OP的问题,你的答案似乎是正确的
    SELECT substr(a.userId , -(length(a.userID)-2))
    from  UserName a
    INNER JOIN UserName  b ON a.substr(a.userId , -(length(a.userID)-2)) = b.UserId
            AND userId like 'AB%'