Announcement

Collapse
No announcement yet.

Doppelte Datensätze in 2 Tabellen.

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Doppelte Datensätze in 2 Tabellen.

    Hallo,

    ich hab ein riesen Problem. Ich hab eine Access-DB mit 2 Tabellen und einer Abfrage. In dieser Abfrage möchte ich gerne alle dopplten Datensätze löschen. Gibt es da mit SQL eine Möglichkiet?
    Ich habe einen Befehl gefunden (s. u.) aber da dies meine erste Begegnung mit SQL ist, hilft er mir nicht wirklich. Kann ich ihn verwenden?
    Oder muß ich die Abrfage vorher in eine TAbelle umwandeln?

    DELETE FROM Tabelle
    WHERE Löschbedingung

    Jetzt schon mal vielen Dank für eure Hilfe!!
    Caro

  • #2
    Hallo Caro,

    sieh mal unter http://212.20.164.99\webx?13@@.ee88094/2 nach, vielleicht hilft dir das schon.

    Gruß Fal
    Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

    Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

    Comment


    • #3
      Hi Falk,

      mein Problem besteht auch darin, dass ich nicht sagen kann A=B
      Ich schreib hier mal die ersten paar datensätze hin, vieleicht wirds dann deutlicher.

      PathName sDomain sAccount NTPerms PathID
      \\hdhdevfs1\kloskall$\ NP kloskall Change(RWXD)(RWXD) 0
      \\hdhdevfs1\kloskall$\ BUILTIN Administratoren Full Control(All)(All) 0
      \\hdhdevfs1\kloskall$\ NT AUTHORITY SYSTEM Full Control(All)(All) 0
      \\hdhdevfs1\kloskall$\Erledigt\Änderungen Bauteilinfo\ BUILTIN Administratoren Full Control(All)(All) 1
      \\hdhdevfs1\kloskall$\Erledigt\Änderungen Bauteilinfo\ NP kloskall Change(RWD)(RWXD) 1
      \\hdhdevfs1\kloskall$\Erledigt\Änderungen Bauteilinfo\ Everyone Read & Execute(RX)(RX) 1
      \\hdhdevfs1\kloskall$\Erledigt\Änderungen Bauteilinfo\ NT AUTHORITY SYSTEM Full Control(All)(All) 1
      \\hdhdevfs1\kloskall$\Erledigt\Änderungen Bauteilinfo\Seite.htm NP kloskall Change(RWXD) 2

      Es sind fünf spalten. Und es sollen alle Datensätze gelöscht werden deren fünf Felder übereinstimmen.
      Ich hab einfach keinen Plan wie ich das in den Code schreibne soll.

      Trotzdem danke!!!!!!

      car

      Comment


      • #4
        Hallo Caro,

        wenn du kein Kriterium hast anhand dem du zwei ansonsten gleiche Datensätze unterscheiden kannst, dann ist ein Löschen in einer einzigen Abfrage nicht möglich, da du nicht festlegen kannst welcher Datensatz (von den doppelten) gelöscht werden soll und welcher nicht. Dir bleibt deshalb eigentlich nichts anderes übrig (zumindest fällt mir nichts besseres ein ;-( als in einer ersten Query alle Datensätze durchzuackern die mehrmals vorkommen und dann in einer zweiten mit Locate den Datensatzzeiger auf den ersten von diesen Datensätzen zu positionieren und diesen dann zu löschen.
        das SQL-Statement für die erste Abfrage könnte dann so aussehen:<pre>
        select PathName, sDomain, sAccount, NTPerms, PathID
        from Tabelle
        group by PathName, sDomain, sAccount, NTPerms, PathID
        having count(*) > 1</pre>
        und die Programmschleife wäre dann in etwa so:<pre>
        ...
        Query1.Open;
        while not Query1.EOF do
        begin
        if DelTable.Locate('PathName;sDomain;...[Query1PathName.AsString, Query1sDomain.AsString...]) then
        DelTable.Delete;
        Query1.Next;
        end;
        ...</pre>
        Für Locate mußt du mal noch die genaue Syntax in der Hilfe nachschlagen - bin ich jetzt zu faul ;-)

        Gruß Fal
        Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

        Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

        Comment


        • #5
          Versuch es doch mal indem Du zwei sql statements mit einem intersect verbindest die sergibt bei Oracle SQL die Menge die identisch ist.

          select ..... from .......;
          intersect
          select ..... from .......

          Comment


          • #6
            Hallo Carolin,

            ich glaube, daß Du mit einer Anweisung in der Form (den genauen Syntax mußt Du noch einmal nachschlagen):

            delete
            from Tabelle1
            where
            Tabelle1.Feld1 =

            select
            Tabelle2.Feld2
            from
            Tabelle2

            ans Ziel kommst. Wobei Du das Select vom Falk übernehmen mußt.

            mfg js

            Comment


            • #7
              delete from tabelle1 a where exists
              (select '' from tabelle 2 b where
              a.feld1 = b.feld1

              Comment

              Working...
              X