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

时间:2019-01-29 23:22:21

标签: mysql sql

这是规则:

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

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

我知道这听起来令人困惑,请参见下面的示例:

具有10条记录的表UserName及其userId字段(10条记录)为:

Route::group(['prefix' => '/v1', 'middleware' => ['auth:api'], 'namespace' => 'Api\V1', 'as' => 'api.'], function () {
        Route::post('/post/like','PostLikeController@store');

});
Route::group(['prefix' => '/v1', 'namespace' => 'Api\V1', 'as' => 'api.'], function () {
        Route::post('login', 'Auth\LoginController@login');
});

运行查询后所需的结果:

ABC1234
C1234
C12345
BC12345
BBC1234

ABF1235
F1235

ABY1236

BCD3456
D3456

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

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

ABC1234
ABF1235

感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

您可以使用EXISTS从3d字符开始检查是否有一个userId等于“ AB ..”的右侧:

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

答案 1 :(得分:0)

您可以尝试使用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%'