2017-12-14 1 views
0

Ich versuche, jede Zeile mit Duplikaten in einer MySQL-Datenbank zu finden.Suchen Sie doppelte concat Werte

1 alex smith 
2 bob  smith 
3 alex smith 

ich zurückkehren wollen:

1 alex smith 
3 alex smith 

Dieser Code Duplikate finden, aber es funktioniert nicht jede Zeile auflisten, die ein Duplikat ist.

SELECT 
    *, 
    CONCAT(`firstName`, ' ', `lastName`) as full_name, 
    COUNT(*) d 
FROM users 
GROUP BY full_name 
HAVING d > 1; 

Der folgende Code ist das, was ich versuche, jede Zeile zu erhalten, die eine dupliate ist, aber ich habe den Fehler "# 1054 - Unknown column 'full_name' in 'IN/ALL/jede Unterabfrage'"

SELECT CONCAT(`firstName`, ' ', `lastName`) as full_name 
FROM users 
WHERE full_name IN (
    SELECT CONCAT(`firstName`, ' ', `lastName`) as full_name 
    FROM users 
    GROUP BY full_name 
    HAVING COUNT(full_name) > 1 
) 
+1

warum nicht ein einfaches: 'where firstName = 'x' und lastName = 'y''? – Ali

+0

@Ali OP möchte auch alle anderen Duplikate finden. – isaace

+0

ahhh okay, verstanden die Frage falsch – Ali

Antwort

2

Sie können keine Aliase in WHERE-Klauseln verwenden; und Sie brauchen nicht wirklich die CONCAT (es erhöht Ihre Rechenkosten in diesem Fall); stattdessen können Sie "Tupel" vergleichen.

SELECT * 
FROM users 
WHERE (`firstName`, `lastName`) IN (
    SELECT `firstName`, `lastName` 
    FROM users 
    GROUP BY `firstName`, `lastName` 
    HAVING COUNT(*) > 1 
); 
Verwandte Themen