Announcement

Collapse
No announcement yet.

Tabellen abgleichen mit minus.. aber wie???

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

  • Tabellen abgleichen mit minus.. aber wie???

    Hallo zusammen,

    ich habe folgende Abfrage erstellt (s. Abfrage 1), die dafür sorgt, dass alle Rechnungssummem aus der Migration mit den Rechnungssummen mit der Produktioen abgeglichen werden.
    Der Grund für die Abfrage ist, dass falsche Rechnungssummen in die Produktion migriert wurden.

    Nun möchte ich meine Abfrage Gegenprüfen, um zu schauen ob die selektierten Rechnungssummen tatsächlich auch diese sind und ob es weitere gibt???
    Die Gegenprüfung habe ich mit der minus Anweisung erstellt. Da ich mich nicht mit der Minus Anweisung auskenne habe ich eine einfache Abfrage aufgebaut, die mich nicht wwirklich zufrieden stellt.
    Bspw. habe ich es nicht hinbekommen bzw. wüsste im Moment nicht wie ich die Where Bedingung and migr.rechnung_summe!=prod.rechnung_summe in die 2 Abfrage einbauen könnte um die rechnungssummen der produktion und der migration abzugleichen??

    Wer könnte mir da weiterhelfen?? Ich würde mich über jeden Tipp freuen.


    // Abfrage 1
    select migration.rechnung_summe NEU,migration.kunden_nr,prod.rechnung_summe ALT
    from migr.migration_rechnung migr, seb.rechnungen@recprod prod
    where migr.rechnung_art='Einzug'
    and migr.kunde_nr = prod.kunde_nr
    AND migr.rechnung_nr = prod.rechnung_nr
    AND migr.rechnung_betrag = prod.rechnung_betrag
    AND migr.objekt_nr = prod.objekt_nr
    AND migr.gueltig_ab = prod.gueltig_ab
    and migr.rechnung_offen='ja'
    and migr.rechnung_historie='Aktuell'
    and migr.rechnung_summe!=prod.rechnung_summe
    and prod.rechnung_offen='ja'
    and prod.rechnung_historie='Aktuell'
    order by migr.kunde_nr asc



    //Abfrage 2
    select migration.rechnung_summe,migration.kunden_nr
    from migr.migration_rechnung migr
    where migr.rechnung_art='Einzug'
    and migr.rechnung_offen='ja'
    and migr.rechnung_Historie='Aktuell'
    minus
    select prod.rechnung_summe,prod.kunden_nr
    from seb.rechnungen@recprod prod
    where prod.rechnung_art='Einzug'
    and prod.rechnung_offen='ja'
    and prod.rechnung_Historie='Aktuell'

  • #2
    in Abfrage1 fehlt im vergleich zu Abgrage2:
    prod.rechnung_art = 'Einzug'

    und in Abfrage2 fehlen
    , rechnung_nr
    , rechnung_betrag
    , objekt_nr
    , gueltig_ab

    Wenn du die Datensätze in Abfrage2 haben möchtest die im ersten Teil sind aber nicht im zweiten Teil und bei dem Join in Abfrage1 die Felder
    migr.kunde_nr = prod.kunde_nr
    migr.rechnung_nr = prod.rechnung_nr
    migr.rechnung_betrag = prod.rechnung_betrag
    migr.objekt_nr = prod.objekt_nr
    migr.gueltig_ab = prod.gueltig_ab
    migr.rechnung_summe != prod.rechnung_summe

    miteinander verbindest. Musst du die auch im Select mit aufnehmen:
    Ich denke beide SQL sollten so aussehen:

    // Abfrage 1
    SELECT migr.rechnung_summe NEU
    , migration.kunden_nr
    , prod.rechnung_summe ALT
    FROM migr.migration_rechnung migr
    , seb.rechnungen@recprod prod
    WHERE migr.kunde_nr = prod.kunde_nr
    AND migr.rechnung_nr = prod.rechnung_nr
    AND migr.rechnung_betrag = prod.rechnung_betrag
    AND migr.objekt_nr = prod.objekt_nr
    AND migr.gueltig_ab = prod.gueltig_ab
    AND migr.rechnung_art = 'Einzug'
    AND migr.rechnung_offen = 'ja'
    AND migr.rechnung_historie = 'Aktuell'
    AND prod.rechnung_art = 'Einzug'
    AND prod.rechnung_offen = 'ja'
    AND prod.rechnung_historie = 'Aktuell'
    AND migr.rechnung_summe != prod.rechnung_summe
    ORDER BY migr.kunde_nr ASC



    //Abfrage 2
    SELECT rechnung_summe
    , kunden_nr
    , rechnung_nr
    , rechnung_betrag
    , objekt_nr
    , gueltig_ab
    FROM migr.migration_rechnung migr
    WHERE migr.rechnung_art = 'Einzug'
    AND migr.rechnung_offen = 'ja'
    AND migr.rechnung_Historie = 'Aktuell'
    MINUS
    SELECT rechnung_summe
    , kunden_nr
    , rechnung_nr
    , rechnung_betrag
    , objekt_nr
    , gueltig_ab
    FROM seb.rechnungen@recprod prod
    WHERE prod.rechnung_art = 'Einzug'
    AND prod.rechnung_offen = 'ja'
    AND prod.rechnung_Historie = 'Aktuell'

    Comment


    • #3
      danke uminky.

      ich werde das mal testen.

      Comment


      • #4
        Hallo uminky,

        ich habe es testen können. Für die Prüfung ist das eigentlich ok, aber ich erhalte mehr Werte in der Abfrage 2 als in der Abfrage 1. Ich denke, dass es mit der Migrationsdatenbank zu tun hat. In der Produktion finden ja täglich Änderungen statt.

        Nun lautet meine Frage, inwieweit ich die erste Abfrage andersweitg proben kann. Ich habe mal im Inet gelesen, dass man da auch mit Inner Join testen kann?? Stimmt das?? Was meinst du bzw. Ihr dazu??

        Welche Alternativen gibts denn noch??

        Comment


        • #5
          Die Frage ist was du brauchst.

          Bei dem Minus bekommst du alle aus Tab1 die nicht in Tab2 sind.
          Bei einem outer Join bekommst du alle aus Tab1 und die details aus Tab2 die der Join Bedingung genügen sonst NULL.

          http://notec.net/hints/32-oracle/66-...in-clause.html

          Comment


          • #6
            Hey danke uminky,

            aber wird durch einen left outer Join nicht davon ausgegangen, dass die zu vergleichende Tabellen unterschiedlich strukturiert sind. Um Bspw. die Daten zu ermitteln die in der eigentlichen Tabelle nicht gegeben sind. Wie unten das Beispiel das Datum...

            Wie bspw. Tabelle A = kunde_nr, rechnung_nr
            Tabelle B = kunde_nr, rechnung_nr, datum


            select kunde_nr, rechnung_nr, datum
            from tabelle a left outer join tabelle b
            ... usw.

            Wird ein left outer Join nicht eher für solche Probleme eingesetzt. Oder Irre ich mich??? Bzw. kann ich dass auch in diesem Fall bei mir verwedenen obwohl die Tabellenstruktur gleich ist???

            Comment


            • #7
              Hast du dir durchgelesen was hier steht?
              http://notec.net/hints/32-oracle/66-...in-clause.html
              oder hier:
              http://www.rrzn.uni-hannover.de/file...e/10g_ef06.pdf

              Comment


              • #8
                Richtig. Wer Lesen kann ist klar im Vorteil.

                Danke nochmals uminky. Ich werde die Abfrage mal testen.

                Comment

                Working...
                X