как получить не дубликаты? - PullRequest
0 голосов
/ 24 апреля 2019

Мне нужно сделать запрос в SQL.

У меня есть поле, содержащее идентификаторы.Эти идентификаторы записываются двумя способами и имеют префикс «C0» или «E0», например: «C0121213» или «E0121213».

Я хотел бы сделать запрос, позволяющий найти номеридентификаторов, начинающихся с C0, но не дублирующих, начиная с E0.

То есть я хотел бы найти идентификаторы, в которых нет пар C0 или E0.

Заранее спасибо

Я начал с запроса:

SELECT   *
FROM     SBYN
WHERE    ID IN (
                SELECT LID
                FROM   SBYN
                WHERE LEFT(ID,2) = 'C0'
                OR LEFT(ID, 2) = 'E0'
                GROUP BY LID HAVING COUNT(*) > 1
                )
ORDER BY ID

Ответы [ 3 ]

2 голосов
/ 24 апреля 2019

NOT EXISTS приходит на ум:

SELECT COUNT(*)
FROM SBYN s
WHERE s.ID LIKE 'C0%' AND
      NOT EXISTS (SELECT 1
                  FROM SBYN s2
                  WHERE s2.ID LIKE 'E0%' AND
                        SUBSTRING(s2.ID, 2) = SUBSTRING(s.ID, 2)
                 );

Если вы хотите ID s, тогда используйте SELECT ID вместо SELECT COUNT(*).

1 голос
/ 24 апреля 2019

С NOT EXISTS:

select * from sbyn s
where not exists (
  select 1 from sbyn
  where left(id, 2) <> left(s.id, 2) and
  right(id, 3, length(id)) = right(s.id, 3, length(s.id))
)

Это вернет все не дубликаты.Если вас интересуют только те, которые начинаются с C0, добавьте к предложению where:

and left(s.id) = 'C0'
1 голос
/ 24 апреля 2019

Использование EXISTS:

SELECT
    ID
FROM SBYN s1
WHERE
    ID LIKE 'C0%' AND
    NOT EXISTS (SELECT 1 FROM SBYN s2
                WHERE s2.ID LIKE 'E0' AND
                      SUBSTRING(s1.ID, 3) = SUBSTRING(s2.ID, 3));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...