U kunt altijd de GROUP BY
. gebruiken / HAVING
query in een IN-component. Dit werkt en is relatief eenvoudig, maar het is misschien niet bijzonder efficiënt als het aantal dubbele rijen relatief groot is.
SELECT *
FROM table1
WHERE (name, type_id) IN (SELECT name, type_id
FROM table1
GROUP BY name, type_id
HAVING COUNT(*) > 1)
Het zou over het algemeen efficiënter zijn om analytische functies te gebruiken om te voorkomen dat u een tweede keer op tafel komt.
SELECT *
FROM (SELECT id,
name,
type_id,
code,
lat,
long,
count(*) over (partition by name, type_id) cnt
FROM table1)
WHERE cnt > 1
Afhankelijk van wat je van plan bent te doen met de gegevens en hoeveel duplicaten van een bepaalde rij er zijn, wil je misschien ook lid worden van table1
naar zichzelf om de gegevens in een enkele rij te krijgen
SELECT a.name,
a.type_id,
a.id,
b.id,
a.code,
b.code,
a.lat,
b.lat,
a.long,
b.long
FROM table1 a
JOIN table1 b ON (a.name = b.name AND
a.type_id = b.type_id AND
a.rowid > b.rowid)