Подтвердить что ты не робот

SQL Возвращает только повторяющиеся строки

У меня есть запрос, который возвращает следующие строки:

StateId, OrderId, OrderTime, PermitId

Мне нужно возвращать только строки, которые являются точными дубликатами по всей доске, поэтому каждая запись должна быть точно такой же, как и другая запись, чтобы она была дубликатом. Я хотел бы вернуть обе записи. Эти реорганы смешиваются с кучей записей, у которых нет дубликатов...

Любая идея?

4b9b3361

Ответ 1

Сначала укажите дубликаты. Во-вторых, присоединитесь назад, чтобы извлечь эти строки.

Неагрегированное (или не-окно/ранжирование) самосоединение образует частичное перекрестное объединение и дает квадрат дубликатов для любого набора ключей. Включая не дубликаты. 1 x 1 = 1 в конце концов.

SELECT
    t2.*
FROM
    (
    SELECT 
       StateId, OrderId, OrderTime, PermitId
    FROm
       myTable
    GROUP BY
       StateId, OrderId, OrderTime, PermitId
    HAVING
       COUNT(*) >= 2
    ) T1
    JOIN
    mytable T2 ON T1.StateId = T2.StateId AND T1.OrderId = T2.OrderId AND
                   T1.OrderTime = T2.OrderTime AND T1.PermitId = T2.PermitId

Ответ 2

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

SELECT StateId, OrderId, OrderTime, PermitId, COUNT(*) FROM Foo
GROUP BY StateId, OrderId, OrderTime, PermitId
HAVING COUNT(*) > 1

Ответ 3

Одна возможность, если ваш сервер базы данных поддерживает подзапросы:

select * from your_table
 where (StateId, OrderId, OrderTime, PermitId) in
  ( select StateId, OrderId, OrderTime, PermitId
      from your_table
     group by StateId, OrderId, OrderTime, PermitId
    having count(1) > 1 )