Bevor ich etwas raten kann, muss ich die Antwort auf diese Frage wissen:
name phone email
John 555-00-00 [email protected]
John 555-00-01 [email protected]
John 555-00-01 [email protected]
Was COUNT(*)
Sie für diese Daten wollen?
Update:
Wenn Sie wollen einfach nur wissen, dass ein Datensatz keine Duplikate hat, verwenden Sie diese:
WITH q AS (
SELECT 1 AS id, 'John' AS name, '555-00-00' AS phone, '[email protected]' AS email
UNION ALL
SELECT 2 AS id, 'John', '555-00-01', '[email protected]'
UNION ALL
SELECT 3 AS id, 'John', '555-00-01', '[email protected]'
UNION ALL
SELECT 4 AS id, 'James', '555-00-00', '[email protected]'
UNION ALL
SELECT 5 AS id, 'James', '555-00-01', '[email protected]'
)
SELECT *
FROM q qo
WHERE EXISTS
(
SELECT NULL
FROM q qi
WHERE qi.id <> qo.id
AND qi.name = qo.name
AND (qi.phone = qo.phone OR qi.email = qo.email)
)
Es ist effizienter, aber nicht sagen, wo das Duplikat Kette begann.
Diese Abfrage wählt alle Einträge zusammen mit dem speziellen Feld chainid
aus, das angibt, wo die doppelte Kette gestartet wurde.
WITH q AS (
SELECT 1 AS id, 'John' AS name, '555-00-00' AS phone, '[email protected]' AS email
UNION ALL
SELECT 2 AS id, 'John', '555-00-01', '[email protected]'
UNION ALL
SELECT 3 AS id, 'John', '555-00-01', '[email protected]'
UNION ALL
SELECT 4 AS id, 'James', '555-00-00', '[email protected]'
UNION ALL
SELECT 5 AS id, 'James', '555-00-01', '[email protected]'
),
dup AS (
SELECT id AS chainid, id, name, phone, email, 1 as d
FROM q
UNION ALL
SELECT chainid, qo.id, qo.name, qo.phone, qo.email, d + 1
FROM dup
JOIN q qo
ON qo.name = dup.name
AND (qo.phone = dup.phone OR qo.email = dup.email)
AND qo.id > dup.id
),
chains AS
(
SELECT *
FROM dup do
WHERE chainid NOT IN
(
SELECT id
FROM dup di
WHERE di.chainid < do.chainid
)
)
SELECT *
FROM chains
ORDER BY
chainid
Sie wollen also "Bob/567/irgendetwas", "Bob/alles/[email protected]" und "Bob/567/[email protected]" als Duplikate zählen? Was ist, wenn es eine "Bob/234/[email protected]" gibt? Einige Datenbeispiele zur Verdeutlichung Ihrer Gruppierungsregel würden wirklich helfen. – AakashM
Verständlich. Das tut mir leid. Quassnoi hat unten ein gutes Beispiel gegeben (und ich habe die Frage dort beantwortet). Vielen Dank. – Scott04073
Möchten Sie tatsächlich Duplikate entfernen? –