Announcement

Collapse
No announcement yet.

Unterschiede zweier Tabellen

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

  • Unterschiede zweier Tabellen

    Hallo ich habe hier folgendes Problem.

    Es sollen 2 Tabellen verglichen werden. Sobald sich ein Wert in einer Tabelle verändert, soll dieser in eine 3. Tabelle eingetragen werden.

    Ich habe dazu folgendes gemacht was mir zumindest mal anzeigt, was in einer Tabelle nicht vorhanden ist im Vgl. zu der Anderen:

    Code:
    INSERT INTO TESTTABLE3 (SELECT name,adresse,plz FROM V_Testview Minus SELECT name,adresse,plz FROM V_Testview2)
    Jetzt ist es aber so, dass die komplette Spalte angezeigt wird und nicht nur der Wert der sich geändert hat.

    Bsp:

    Tabelle1:

    Name Adresse PLZ

    Hans Weg 123

    Tabelle2:

    Name Adresse PLZ

    Hans Str 123


    Tabelle3(Ergebnis)

    Name Adresse PLZ

    Hans Weg 123

    Es wird also der Datensatz von Tabelle 1 angezeigt, da dieser ja nicht in Tabelle 2 vorkommt.

    Was ich aber möchte ist etwas in der Art:

    Alter Datensatz: Weg
    Neuer Datensatz: Straße

    Meine Idee war evtl. über eine Where Bedingung rausfiltern Where a.name<>b.name oder so weil da sieht man auf jeden Fall dann eine Veränderung ???



    Wäre über Hilfe sehr dankbar
    Zuletzt editiert von Gerudom; 02.04.2008, 16:35.

  • #2
    Hallo!

    Die beiden Tabellen brauchen igendeine Gemeinsamkeit.
    z.B eine gemeinsame Kundennummer oder die Reihenfolge in der Tabelle oder oder...
    sonst ist ja jeder Datensatz ungleich allen anderen und würde protokolliert werden.

    Tabelle 1
    Frank abc 123
    Peter xyz 456

    Tabelle 2
    Steffen eee 111
    Gabi bbb 222

    Damit ist
    Gabi ungleich Frank
    aber auch Gabi ungleich Peter usw.
    Ist reichlich unsinnig oder?


    BYE BERND

    Comment


    • #3
      Hallo Gerudom,

      eine allgemeine SQL-Lösung wirst du dafür nicht finden. Je nach DBMS gibt es verschiedene Möglichkeiten der Replikation, aber auch Lösungen mittels Trigger.

      Gruß Falk
      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


      • #4
        Es gibt also keine Möglichkeit 2 Tabellen miteinander zu vergleichen und das was in einer Tabelle geändert wurde im Vergleich zur anderen mit SQL rauszufiltern ?
        Ich meine mit MINUS ist doch schonmal ne Idee gegeben um zumindest einen Unterschied festzustellen. Was ich jetzt noch brauchen würde, wäre das er da nicht die gesamte Zeile ausgibt sondern vielleicht nur den Wert der Spalte die sich verändert hat.

        Meine Idee wäre ja irgendwie was mit WHERE a.name<>b.name oder so ???

        Comment


        • #5
          Originally posted by Gerudom View Post
          ...Meine Idee wäre ja irgendwie was mit WHERE a.name<>b.name oder so ???
          Die Idee in allen Ehren, aber die WHERE-Klausel hat nur Einfluß auf die Ergebnismenge. Welche Spalten deine Ergebnismenge hat kannst du nur mit der SELECT-Klausel festlegen.
          Wie bereits gesagt, kommst du hier mit reinem SQL nicht weiter und die Lösungsmöglichkeiten sind vom verwendeten DBMS abhängig.

          Gruß Falk
          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


          • #6
            Das Programm ist in Visual Basic Script geschrieben. Leider bin ich auch da totaler Neuanfänger. Ist es dort irgendwie möglich Spalte für Spalte zu vergleichen ob eine Veränderung vorliegt und dann die Veränderung in eine 3. Tabelle zu schreiben ?
            Es soll eben nur die Veränderung angezeigt werden in der 3. Tabelle und nicht die unveränderten Werte. Werte die bereits in der 3. Tabelle drin stehen und erneuert wurden sollen geupdatet werden also nicht immer nur mit INSERT neue Werte eintragen

            Ich komm leider nicht drauf wie ich das anpacken könnte

            Edit: Ich habe etwas rumprobiert und bin momentan zu dem Ergebnis gekommen, dass mir der 1. Datensatz in der 1. Spalte verglichen wird. Aber nur dann, wenn er auch in der anderen Tabelle gefunden wird.

            Wo ich noch dringend Hilfe brauche ist, wenn der Datensatz nicht vorhanden ist, oder er nicht an 1. Stelle steht einer Spalte steht ? Das habe ich noch nicht rausgefunden.


            Do Until ADORec1.EOF
            Dim flag : flag = False


            Do Until ADORec2.EOF

            If ADORec1("name").Value = ADORec2("name").Value Then



            If ADORec1("adresse").Value <> ADORec2("adresse").Value Then
            adresse=ADORec2("adresse").Value
            flag = True
            Else
            flag = False
            adresse = ""
            End If

            If CDbl(ADORec1("plz").Value) <> CDbl(ADORec2("plz").Value) Then
            plz=ADORec2("plz").Value
            flag = True
            Else
            flag = False
            plz = " "
            End If

            Exit Do

            Else



            End If
            ADORec2.MoveNext
            Loop
            If flag Then
            ' SQL INSERT BEFEHL
            SQL3="INSERT INTO TESTTABLE3" & _
            "("& _
            "adresse" &_
            ",plz" & _
            ")" & _
            "VALUES " & _
            "('"& adresse & "'," & plz & ")"


            ADORec3.Open SQL3, cnnConnect
            flag = False
            End If

            ADORec1.MoveNext
            Loop
            Zuletzt editiert von Gerudom; 03.04.2008, 15:15.

            Comment


            • #7
              Hallo Gerudom,

              wenn du dich entschlossen hast, dein Problem programm- und nicht datenbanktechnisch zu lösen, dann solltest du deine Frage besser im VB- oder ADO-Forum nochmal konkret stellen. Dein letzter Post hat ja nur noch bedingt was mit SQL zu tun.

              Gruß Falk
              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

              Working...
              X