Duplikate aufzeigen mit SQL

  • VB6

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von Agent.

    Duplikate aufzeigen mit SQL

    hi leute,

    ich möchte mit SQL sagen:

    Wähle alles aus der Tabelle RS aus wo Feld1 und Feld 2 und Feld 3 den gleichen Inhalt haben.

    weiß jemand wie das in SQL heißen muss ?

    ergänzung:

    ich meine das so

    Name | Autor | Preis
    Buch1 | Autor1 | 5?
    Buch2 | Autor2 | 3?
    Buch1 | Autor1 | 5?

    und nun brauch ich den SQL befehl der mir alle informationen des doppelten Datensatzes ausgibt.#

    jetzt meine Frage .. ist das machbar??


    Vielen DANK
    hab mal mit Access nen befehl erzeugt ...

    SELECT DISTINCTROW First([Name]) AS [Name Feld], First([Autor]) AS [Autor Feld], First([Format]) AS [Format Feld], First([Erscheinungsjahr]) AS [Erscheinungsjahr Feld], First([Anzahl]) AS [Anzahl Feld], Count([Name]) AS AnzahlVonDuplikaten
    FROM Buecher
    GROUP BY [Name], [Autor], [Format], [Erscheinungsjahr], [Anzahl]
    HAVING Count([Name])>1 And Count([Anzahl])>1;


    ABER:

    ich sage ganz ehrlich, ich bin nicht fähig den für VB 6 umzuschreiben, also so .. das man damit in VB was anfangen kann ... ich nutze DAO und hab ne Suchen funktion mit sql nach Tagelangen versuchen hingekriegt ... aber das ist schwierig

    kann mir jemand helfen und das evtl. mal einwenig umformen??

    wäre echt supi ...

    Danke , gruß .. ich *smile*
    Muss man denn die Access SQL Anweisung für VB umschreiben? Kann man die nicht 1:1 verwenden? Ansonsten kenne ich auch keine Lösung für dieses Problem. Falls du es nicht anders hinbekommst, durchlaufe doch einfach die komplette Datenquelle und suche so nach Duplikaten. Das ist sicher einfacher (wenn auch nicht so elegant wie mit einer SQL Anweisung).
    Besucht auch mein anderes Forum:
    Das Amateurfilm-Forum
    Hi,

    Sollen die Datensätze doppelt vorhanden sein?? Oder möchtest du nur die doppelten löschen??

    Lösung 1:
    Wenn keine doppelten Datensätze vorhanden sein sollen, lässt sich das über einen sogenannten "Primary
    Key" lösen. Das heisst du definierst die Felder die (zusammen) EinEindeutig sein sollen als PrimaryKey.

    Bei deinem Bsp. würde das folgendes Ergebnis bringen:

    Name, Autor und Preis sind als Primary Key definiert.

    Name | Autor | Preis
    Buch1 | Autor1 | 5?
    Buch2 | Autor2 | 3?
    Buch1 | Autor1 | 5? <--- dieser Eintrag wäre dann gar nicht möglich (die DB nimmt ihn nicht an)
    Buch1 | Autor1 | 4? <--- dieser Eintrag ist möglich!

    Lösung 2:
    Wenn die doppelten Einträge gewünscht sind (wenn die Tabelle z.b. weitere Felder hat),kannst du die
    Datensätze in ein Recordset einlesen und dann vergleichen. (wie Marcus schon schrieb)

    Es geht mit Sicherheit auch mit einer SQL-Anweisung. Dafür solltest du SQL aber schon ziemlich
    gut kennen um das zu versuchen. Ansonsten suchst du dich tot, falls dort auch nur eine Klammer o.ä.
    fehlt.


    bye ...

    LaMa5.
    Die Wissenschaft wird nie ein besseres Kommunikationssystem in den Büros erfinden können als die Kaffeepause.
    (Autor: Earl Wilson, amerik. Schriftsteller)

    https://www.serviceteam-md.de

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „LaMa5“ ()

    also, vielen dank erst mal für die schnellen antworten, auch heute am feiertag.

    die daten stehen absichtlich doppelt in der tabelle , weil ich mit meinem programm zeigen muss, dass visual basic mit speziellen befehlen dazu in der lage ist , diese auszulesen und anzuzeigen. es sind noch mehr felder die doppelt sind, in der ganzen datenbank habe ich einen datensatz erzeugt, der einem anderen bis auf die ID (autowert) genau gleicht.
    diesen muss ich auslesen lassen.

    @ marcus ... wie würde das denn funktionieren .. ohne die SQL Anweisung ... denn wie ich das mache, ist mir überlassen worden?

    Vielen DANK schon mal

    Liebe Ostergrüße , qs6
    Erstmal würde ich die Datenquelle durchlaufen, etwa so in der Art:

    while not rs.eof
    rs.next
    wend

    Dann würde ich mir in der Schleife jeden Datensatz irgendwo drin speichern, z.B. in einem Array oder einem Collection-Objekt. Am besten ein Array eines benutzerdefinierten Typs. Jedes Mal sollte man dann in seinem Array nachgucken, ob der Eintrag schon da ist und wenn ja, dann einen zusätzlichen Wert setzen, der die Anzahl angibt.

    Etwa so:

    type daten
    feld1 as string
    feld2 as string
    end type

    wenn daten in array dann
    anzahl um 1 erhöhen
    ansonsten
    daten.feld1 = rs.feld1
    daten.feld2 = rs.feld2

    Ich hoffe, man versteht was ich meine. :D
    Besucht auch mein anderes Forum:
    Das Amateurfilm-Forum
    könnte schon sein dass es so funktioniert, aber ich kann doch nicht für einen datensatz 8 variablen speichern und das gleiche dann mit den nächsten 200 datensätzen machen ... um sie alle zu vergleichen ... oder hab ich da was falsch verstanden .. das wär doch ziemlich viel *g* :)

    gruß qs6
    ich habs mir so vorgestellt ... ungefähr

    SQL2 = "SELECT * FROM buecher ... und dann : wo der Inhalt von Feld 1 mehr als einmal in der ganzen Tabelle vorkommt ....
    das dann halt noch als SQL befehl *smile*

    List2.Clear

    If buecher.EOF Then
    MsgBox ("Keine doppelten Datensätze vorhanden")
    Else
    Do While Not buecher.EOF
    DoppSuchen_Bez = buecher!Name
    List2.AddItem "Name:" & vbTab & vbTab & (DoppSuchen_Bez)
    DoppSuchen_Autor = buecher!Autor
    List2.AddItem "Autor:" & vbTab & vbTab & (DoppSuchen_Autor)
    List2.AddItem "-------------------------------------------------------"
    buecher.MoveNext
    Loop
    End If

    End Sub

    so wäre es wunderbar ... muss doch gehen , oder ist das zu schwierig .. und ich stell es mir einfacher vor als es ist ??

    vielen dankeschön *g*

    PS .. sorry wegen der 2 posts ....

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „qs6“ ()

    Bitte höre mal auf, immer zwei Posts hintereinander zu machen, es gibt eine Editierfunktion für Postings.

    Zu deinem Problem kann ich vielleicht nachher noch was sagen (falls bis dahin keine Antwort von jemand anderem gekommen ist).
    Besucht auch mein anderes Forum:
    Das Amateurfilm-Forum
    Hier sind doch schon ne menge Lösungen genannt worden. Kannst du mit denen echt NICHTS anfangen? Wenn du das mit SQL nicht hinbekommst, nehm doch einfach die ganze Datenmenge und such selbst nach Dublikaten, spart sucherei und zeit...
    Gruß, Agent Smith 8-)

    activeFlags = (lazy OR weary)

    Lemgo-Verschwörung | Mathematics | VB-Paradise in blau