mysql - 如何通过忽略前两个字符来从下面的重复记录中获取唯一记录的列表?

标签 mysql sql

规则如下:

  1. 比较 userId 时,仅搜索以“AB”开头的 userId 及其匹配的重复项(“AB”除外)。然后通过仅返回上面以“AB”开头的重复用户 ID 来获取“唯一用户 ID”列表。

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

我知道这听起来很困惑,请参阅下面的示例:

表UserName有10条记录,其userId字段(10条记录)为:

ABC1234
C1234
C12345
BC12345
BBC1234

ABF1235
F1235

ABY1236

BCD3456
D3456

运行查询后所需的结果:

ABC1234
ABF1235

请注意:虽然 ABY1236 以“AB”开头,但该记录不应在输出中返回,因为它没有像 Y1236 那样的“重复”匹配(忽略前两个字符“AB”)。

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

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

感谢您的帮助!

最佳答案

您可以使用 EXISTS 来检查是否存在等于从 3d 字符开始的“AB..”右侧部分的 userId:

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

关于mysql - 如何通过忽略前两个字符来从下面的重复记录中获取唯一记录的列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54431126/

相关文章:

php - 用户名不显示 PHP/MySQL

PHP:从数据库获取数据并使用 while 循环

PHP 和 MySQL : Truncate multiple tables

sql - 在SQL中查找每个组对应的第N个值和平均值

sql - 如何在表中查找重复名称

mysql - SQL:从多个表中选择

mysql - 将 28 添加到日期的最后 2 位数字并替换订单

mysql使用纬度和经度计算距离

带参数的 MySQL View

php - mySQL表单输入,循环插入,不是插入