SQL: In Abfrage keine Duplikate in bestimmter Spalte zulassen.



  • Hallo Leute,

    ich habe eine Tabelle mit Namen und Adressen wo der Schlüssel eine willkürliche ID ist. Ich möchte nun alle Vor und Nachnamen Kombinationen anzeigen lassen.

    Beispiel:
    > 1 Franz Meier Amselweg
    > 2 Gabi Möller Spatzenweg
    > 3 Franz Meier Finkenweg

    Ich möchte das die Ausgabe so aussieht:
    > Franz Meier Amselweg
    > Gabi Möller Spatzenweg
    Oder so:
    > Gabi Möller Spatzenweg
    > Franz Meier Finkenweg

    > SELECT DISTINCT Vorname, Nachname FROM Tabelle1;

    Wie kriege ich aber wieder die Straße rein? So eine Art Selfjoin?



  • wenn die strasse in tabelle1 ( sehr schlechter name übrigens ) ist, dann

    vorname, name, strasse FROM ...



  • In Wirklichkeit ist das Prob komplizierter. Ich habe es nur auf dieses Beispiel heruntergebrochen um es zu verdeutlichen. Wenn ich es so mache wie Du es angegeben hast werden wieder alle Duplikate angezeigt.



  • wenn ich mich nicht irre gilt das DISTINCT für alle Spalten, du bekommst also nur dann keine doppelten Datensätze zurück, wenn ALLE Spalten die gleichen Werte enthalten oder wenn du nur die Spalten mit doppelten Einträgen anzeigen läßt, also bringt z.B.

    Select distinct vorname, name from tabelle1

    > Franz Meier
    > Gabi Möller



  • Aber wie kriege ich jetzt wieder Straße hinten dran? Egal welche...



  • egal welche geht eben nicht, die Abfrage kann für dich nicht die Entscheidung treffen welche Strasse du haben möchtest, deshalb gibt sie dir beide

    eventuell könnte eine verschachtelte Abfrage funktionieren, z.B.

    select * from tabelle1 where vorname in (select distinct vorname from tabelle1)

    oder

    select name, vorname, count(strasse) from tabelle1 group by name

    wobei dir letzere Abfrage sowas liefert

    > Franz Meier 2
    > Gabi Möller 1


Anmelden zum Antworten