Vinzenz Mai: Gleiche Einträge finden

Beitrag lesen

Hallo,

» also nur in *einer* Spalte?
ja nur die Spalte "TextIdentifier" hat bei manchen Zeilen gleich Einträge.

» Nutze einen Join.
meinst du ein SelfJoin?

nein, nicht ganz:

Nehmen wir an, Deine Tabelle texttbl hätte folgenden Inhalt:

TextID English TextIdentifier
-----------------------------
123    blau    blue
234    Super   super
567    Doll    super
789    Wow     super

Nun liefert

SELECT
    TextIdentifier
FROM
    texttbl
GROUP BY
    TextIdentifier
HAVING
    COUNT(TextIdentifier) > 1

Dir als Ergebnismenge

TextIdentifier
--------------
 super

Willst Du das von Dir anvisierte Ergebnis haben, so könntest Du einfach diese Abfrage mit der Tabelle selbst joinen:

SELECT
    t1.TextID,
    t1.English,
    t1.TextIdentifier
FROM (
    SELECT
        t2.TextIdentifier
    FROM
        texttbl t2
    GROUP BY
        t2.TextIdentifier
    HAVING
        COUNT(t2.TextIdentifier) > 1
) q1
INNER JOIN
    texttbl t1
ON
    q1.TextIdentifier = t1.TextIdentifier

Genausogut könntest Du mit einer korrelierten Unterabfrage arbeiten:

SELECT                                     -- Gib mir
    t1.TextID,                             -- die gewünschten
    t1.English,                            -- Spalten
    t1.TextIdentifier                      --
FROM                                       -- aus
    texttbl t1                             -- meiner Tabelle,
WHERE                                      -- jedoch nur die Datensätze,
    t1.TextIdentifier IN (                 -- deren TextIdentifier in der
        SELECT                             -- Liste
            t2.TextIdentifier              -- der TextIdentifier
        FROM                               -- aus
            texttbl t2                     -- meiner Tabelle enthalten sind,
        GROUP BY
            t2.TextIdentifier
        HAVING                             -- die
            COUNT(t2.TextIdentifier) > 1   -- mehr als einmal vorkommen.
    )

Könnte Dein Ergebnis, wie folgt aussehen:

IDs              Werte              TextIdentifier
--------------------------------------------------
234, 567, 789    Super, Doll, Wow   super

wäre das viel einfacher, weil Du nur die Aggregatsfunktion GROUP_CONCAT benötigst:

SELECT
    GROUP_CONCAT(TextID) IDs,
    GROUP_CONCAT(English) Werte,
    TextIdentifier
FROM
    texttbl
GROUP BY
    TextIdentifier
HAVING
    COUNT(TextIdentifier) > 1

Freundliche Grüße

Vinzenz