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

Вот правило:

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

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

Ответы [ 2 ]

0 голосов
/ 30 января 2019

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

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 голосов
/ 30 января 2019

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

select u.userId from UserName u
where 
  u.userId like 'AB_%'
  and
  exists (
    select 1 from UserName where userId = substr(u.userId, 3)
  )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...