这是规则:
在比较userId时,仅搜索以'AB'开头的用户ID及其匹配的重复项('AB'除外)。然后,仅返回上面重复的开头为AB的userId,即可获得“唯一的userId”的列表。
对于以'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
感谢您的帮助!
答案 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%'