Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Doppelte Einträge

Dieses Thema im Forum "Microsoft SQL Server" wurde erstellt von Chimera16, 26 Februar 2014.

  1. Chimera16

    Chimera16 Aktiver Benutzer

    Hallo Datenbankforum,

    ich habe eine Frage: Ich versuche doppelte Werte in meiner SQL Datenbank zu finden.
    Das ganze mache ich mit folgender Abfrage:

    SELECT title FROM dbo.ebay_item where Status = '0' GROUP BY title HAVING COUNT(*) ^> 1

    Klappt auch wunderbar. Ich bekomme folgendes Ergebnis:

    title

    ------------------------------------------------------------------------------
    --
    SD Card Karte 32GB Class10 Emtec Klasse 10

    SD Card Karte 32GB Class10 Intenso Klasse 10

    SD Card Karte 32GB Class10 SanDisk Extreme Klasse 10 UHS1

    SD MicroSD Card 32GB Intenso Class10 inkl. SD Adapter

    SD MicroSD Card 32GB Intenso Class6 inkl. SD Adapter

    SD MicroSD Card 32GB SanDisk Extreme Class10 UHS1


    (6 Zeilen betroffen)


    Soweit so gut, allerdings benötige ich zu diesen Werten noch den jeweiligen Wert der Spalte "Templatename". Wie setze ich das um? Ich bin leider ein absoluter Anfänger in SQL. Wenn ich ein bisschen am Befehl rumbastel bekomme ich bestenfalls
    "Die Unterabfrage hat mehr als einen Wert zurckgegeben. Das ist nicht zulässig"

    Über jede Hilfe wäre ich sehr dankbar.

    Danke & viele Grüße
     
  2. akretschmer

    akretschmer Datenbank-Guru

    Mit einem JOIN?

    Was hast denn versucht?
     
  3. gurbelunder

    gurbelunder Datenbank-Guru

    Also ich sag gleich: mit einem Aufbau der Tabelle würdest du uns schon mal mehr helfen.

    Aber hast du es mal ganz einfach mit

    Code:
    SELECT templatename, title FROM dbo.ebay_item where Status = '0' GROUP BY title HAVING COUNT(*) ^> 1
    
    versucht?
     
  4. ukulele

    ukulele Datenbank-Guru

    Ich vermute einfach mal das Problem ist er hat doppelte title-Einträge mit unterschiedlichen templates. Da ich nicht weiß wieviele gleiche Einträge jetzt da sein können würde ich es hiermit versuchen:
    Code:
    SELECT    t1.title,
            t1.templatename,
            t2.templatename
    FROM    dbo.ebay_item t1
    LEFT JOIN dbo.ebay_item t2
    ON        t1.title = t2.title
    AND        t1.templatename != t2.templatename
    WHERE    t1.[status] = '0'
    AND        t2.[status] = '0'
    Damit bekommst du zumindest für jedes Duplikat eine zwei Zeilenen zurück. Bei mehreren Duplikaten potenziert sich das aber ganz schnell.
     
  5. Chimera16

    Chimera16 Aktiver Benutzer

    Hallo,

    entschuldigt, dass ich so spät antworte... Ich bin leider beruflich sehr beschäftigt...

    Und noch einmal danke für eure zahlreichen Antworten.
    @akretschmer ich bin wie gesagt Neuling... Ich kenne mich mit keinem Join aus..

    @gurbelunder Zu der Tabelle: Die Tabelle ist riesig und besteht aus mehr als 50 Spalten. Der Name der Tabelle ist dbo.ebay_item, Spalten sind u.a. die erwähnten enthalten: templatename, title und Status.

    Ich möchte gerne alle doppelten "title" angezeigt bekommen. Das klappt mit der, von mir im ersten Post erwähnten, Abfrage. Allerdings wird da "nur" der Titel als Ergebnis angezeigt, ich bräuchte zusätzlich noch den jeweiligen Wert der Spalte "templatename"...

    Das Ergebnis deiner Abfrage lautet:
    Die 'dbo.ebay_item.Templatename'-Spalte ist in der Auswahlliste
    ungültig, da sie nicht in einer Aggregatfunktion und nicht in der
    GROUP BY-Klausel enthalten ist.


    @ukulele Deine Lösung ist perfekt! Genau das was ich gesucht habe! Als Ergebnis bekomme ich das was ich wollte:

    SD MicroSD Card 32GB Intenso Class10 inkl. SD Adapter

    115491



    112980



    SD MicroSD Card 32GB Intenso Class6 inkl. SD Adapter

    111909



    92788



    SD MicroSD Card 32GB SanDisk Extreme Class10 UHS1

    134929



    126680

    .........

    Jetzt kann ich endlich nicht nur sehen "welcher" Titel doppelt ist, sondern auch welcher Templatename dazu gehört. Ich danke dir noch einmal vielmals! Ich habe allerdings noch eine Frage, du schreibst es würde sich bei mehreren Duplikaten potenzieren. Was bedeutet, dass für mich? Liefert die Abfrage noch richtige Ergebnisse wenn ich z.B. 3 oder 4 Duplikate habe? Oder wird sie dann einfach nur unübersichtlich?

    Danke an alle
    Viele Grüße
     
  6. akretschmer

    akretschmer Datenbank-Guru

    Das ist der Teil mit LEFT JOIN in @ukulele 's Antwort.

    Du solltest Dich *ernsthaft* damit beschäftigen, das ist ein fundamentaler Grundbaustein von SQL. Ohne Wissen über die Möglichkeiten von JOIN's bist Du im Dschungel von SQL hoffnungslos verloren.
     
  7. ukulele

    ukulele Datenbank-Guru

    Wenn du 2 Duplikate hast müsstest du als Ergebnis bekommen:
    template X template Y
    template Y template X

    Mit potenzieren meine ich du hast mehr als 2 gleiche Datensätze:
    template A template B
    template A template C
    template A template D
    template B template A
    template B template C
    template B template D
    template C template A
    template C template B
    template C template D
    template D template A
    template D template B
    template D template C

    Dabei handelt es sich um ein Duplikat mit 4 gleichen Tabelleneinträgen. Was du durch die Abfrage nicht bekommst:
    title1 template X template Y
    title2 template A template B template C template D
     
  8. Chimera16

    Chimera16 Aktiver Benutzer

    Hallo,

    @akretschmer Danke für deine Antwort, ich werde mich mal intensiv mit dem Thema Join beschäftigen.

    @ukulele danke auch dir für die Antwort. Achso, ich habe es nun verstanden, das macht mir nichts, ich kann ja einfach die Abfrage erneut ausführen wenn ich ein Duplikat beseitigt habe. :)

    Das Thema ist für mich beendet, ich danke euch allen, insbesondere Ukulele.

    Ein schönes Wochenende noch!
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden