Как я могу получить список уникальных записей из ниже дублированных записей, игнорируя первые два символа?

0

Вот правило:

  1. При сравнении userId ищите только userId, начинающийся с "AB" и его совпадающих дубликатов (кроме "AB"). Затем получите список "уникальных идентификаторов пользователя", вернув только дублированный идентификатор пользователя, в начале которого стоит "AB".

  2. Для возвращенной дублированной строки, начинающейся с 'AB', мы должны убедиться, что есть "duplicate"; в противном случае мы не должны возвращать 0 записей

Я знаю, это звучит странно, см. Пример ниже:

Таблица UserName с десятью записями и ее полями 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%';

Спасибо за помощь!

  • 0
    В том числе @scaisEdge Спасибо.
Теги:

3 ответа

1

Вы можете использовать EXISTS, чтобы проверить, существует ли userId, равный правой части "AB..", начиная с 3d char:

select u.userId from UserName u
where 
  u.userId like 'AB_%'
  and
  exists (
    select 1 from UserName where userId = substr(u.userId, 3)
  )
  • 0
    извините за предыдущие комментарии, я не совсем понял, о чем спрашивал ОП, ваш ответ кажется правильным
  • 0
    Не волнуйтесь.....
0

Вы можете попробовать использовать выборочное соединение для проверки только совпадения результатов.

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%'
0

Попробуйте что-то подобное:

SELECT * FROM
(SELECT userId, count(*) as c from UserName where userId like 'AB%'
GROUP BY substr(userId , -(length(userID)-2))) as t1
WHERE t1.c > 1;

Ещё вопросы

Сообщество Overcoder
Наверх
Меню