Announcement

Collapse
No announcement yet.

update mit werten aus andere tab

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

  • update mit werten aus andere tab

    Juten Tach allerseits :-)

    so erstma grundsätzliches :
    PL/SQL Developer Version 7.1.2.1362
    Oracle Database 10g Release 10.2.0.3.0

    hier möchte ich nun ein Update mit Feldern aus einer anderen tabelle machen. Also BsP:
    tab 1
    felder und beispielwerte A=1 B=2 C=3
    tab 2
    felder mit beispielwerte D=1 E=5 F=6

    jetzt soll das Dings hergehen und in tab 2 feld f das rein schreiben was in tab 1 in feld C steht wenn denn tab 1 A und tab 2 D gleich sind. verständlich?

    also nach dem update das ich machen möchte soll dann in Tab 2 bei dem Datensatz stehen
    D= 1, E=5 und F= 6

    Wäre gaaaaaaaaaaaanz prima wenn mir da einer helfen könnte

    ansosten viele Grüsse und ein schönes WOCHENENDE!

  • #2
    update Tab2
    set FeldName = ( select FeldName from Tab1
    where Tab1.FeldName = Tab2.FeldName
    )
    /

    Comment


    • #3
      Guten Morgen,

      so hab ichs mal probiert:
      update Purchase_part_tab
      set Note_ID =
      (select Note_ID from Inventory_part_tab where Purchase_part_tab.PART_NO =Inventory_part_tab.PART_NO and
      Purchase_part_tab.Contract = Inventory_part_tab.Contract)

      ergibt den Fehler:
      Ora-014070 Aktualisieren von ("Purchase_part_tab"."Note_ID") zu NULL nicht möglich

      Wieso denn bloss?

      Comment


      • #4
        Hallo,

        Darum:
        Offensichtlich gibt es in Purchase_part_tab mindestens einen Datensatz, der in Inventory_part_tab keine passende Entsprechung (Purchase_part_tab.PART_NO =Inventory_part_tab.PART_NO and Purchase_part_tab.Contract = Inventory_part_tab.Contract) hat und zusätzlich liegt auf dem Feld Purchase_part_tab.Note_ID ein NOT NULL-Constraint.

        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


        • #5
          hmmm eigentlich sollte es das nicht geben...
          aber wenn dem so wäre, sollte er doch wenigstens für die die es eine entsprechung gibt die Note_id übernehmen....

          Comment


          • #6
            Also ich hab das nochmal geprüft, es gibt definitiv nur Einkaufsartikel (Purachse_part_tab) die auch im Bestand sind (Inventory_part_tab).
            hat irgendjemand ne Idee wieso ich trotzdm den Fehler bekomme????

            Comment


            • #7
              Bei diesem SQL kommt nicht raus? Das sollte mich sehr wundern.

              SELECT * FROM (
              SELECT FeldName
              , ( SELECT FeldName FROM Tab1 WHERE Tab1.FeldName = Tab2.FeldName) id
              FROM Tab2
              ) WHERE id IS NULL
              /

              Comment


              • #8
                wenn ich das probiere

                SELECT Note_id from (
                SELECT Note_id, (SELECT Note_ID FROM Purchase_part_tab b WHERE b.Part_no = a.part_no) id
                FROM inventory_part_tab a
                ) WHERE id IS NULL

                bekomme ich die fehlermeldung 01427 Unterabfrage für eine Zeile liefert mehr als eine Zeile...

                wobei ich jetzt auch nicht so recht weis, was die abfrage eigentlich tut...

                Comment


                • #9
                  Originally posted by Sabs View Post
                  ...
                  aber wenn dem so wäre, sollte er doch wenigstens für die die es eine entsprechung gibt die Note_id übernehmen....
                  Eine Transaktion wird entweder komplett durchgeführt oder sie scheitert. Irgendwelchen "Murks" dazwischen gibt es bei Oracle nicht!

                  Originally posted by Sabs View Post
                  Also ich hab das nochmal geprüft, es gibt definitiv nur Einkaufsartikel (Purachse_part_tab) die auch im Bestand sind (Inventory_part_tab).
                  hat irgendjemand ne Idee wieso ich trotzdm den Fehler bekomme????
                  Wenn dem so wäre, dann würde definitiv der Fehler nicht kommen. Oder es gibt noch Trigger auf der Tabelle die weitere Manipulationen vornehmen.

                  Du kannst das Ergebnis deines Updates auch vorher mit einem Select überprüfen:

                  [highlight=sql]select Purchase_part_tab.Note_ID alter_wert,
                  (select Note_ID from Inventory_part_tab where Purchase_part_tab.PART_NO =Inventory_part_tab.PART_NO and
                  Purchase_part_tab.Contract = Inventory_part_tab.Contract) neuer_wert
                  from Purchase_part_tab[/highlight]

                  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


                  • #10
                    nochmal zur beschreibung...
                    es gibt die beiden Tabellen Purchase_part_tab und inventory_part_tab mit den feldern part_no, contract_no und Note_ID und noch ein par unrelevanten.
                    Alle Datensätze in Purchase_part sind auch in Inventory_part enthalten, im Inventory_part gibts aber noch ganz viele mehr.

                    das update soll jetzt einfach die die note_id im Purchase_part mit der aus dem inventory_part überschreiben.

                    ein innerjoin auf die beiden tabellen funktionert, aber wie kann ich den die daten dann übernehmen???

                    Comment


                    • #11
                      Originally posted by Falk Prüfer View Post
                      Eine Transaktion wird entweder komplett durchgeführt oder sie scheitert. Irgendwelchen "Murks" dazwischen gibt es bei Oracle nicht!
                      ja aber könnte ich nicht irgendwie ne einschränkung mitgeben, das ers nur für welche machen soll dies auch gibt


                      Originally posted by Falk Prüfer View Post
                      [highlight=sql]select Purchase_part_tab.Note_ID alter_wert,
                      (select Note_ID from Inventory_part_tab where Purchase_part_tab.PART_NO =Inventory_part_tab.PART_NO and
                      Purchase_part_tab.Contract = Inventory_part_tab.Contract) neuer_wert
                      from Purchase_part_tab[/highlight]!
                      Das hab ich probiert und da bekomm ich auch werte zurück. und zwar soviele wies datensätze in der purchase_part_tab hat...
                      dat kann doch nicht sein...

                      Comment


                      • #12
                        Originally posted by Sabs View Post
                        ...
                        das update soll jetzt einfach die die note_id im Purchase_part mit der aus dem inventory_part überschreiben.
                        Die Lösung dazu wurde schon gepostet. Offensichtlich gibt es in Purchase_part aber DS die keine Entsprechung in inventory_part haben.
                        Originally posted by Sabs View Post
                        ...
                        ein innerjoin auf die beiden tabellen funktionert, aber wie kann ich den die daten dann übernehmen???
                        Ein INNER JOIN liefert ja auch nur die DS die in BEIDEN Tabellen vorkommen, während dein UPDATE ALLE DS in Purchase_part betrifft!
                        Ggfs. mußt du in einer WHERE-Klausel für das Update noch die Einschränckung auf die Existenz unterbringen.

                        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


                        • #13
                          Originally posted by Sabs View Post
                          ja aber könnte ich nicht irgendwie ne einschränkung mitgeben, das ers nur für welche machen soll dies auch gibt...
                          Warum nicht!?
                          [highlight=sql]
                          update Purchase_part_tab
                          set Note_ID = (select Note_ID from Inventory_part_tab
                          where Purchase_part_tab.PART_NO =Inventory_part_tab.PART_NO
                          and Purchase_part_tab.Contract = Inventory_part_tab.Contract)
                          where exists (
                          select Note_ID from Inventory_part_tab
                          where Purchase_part_tab.PART_NO =Inventory_part_tab.PART_NO
                          and Purchase_part_tab.Contract = Inventory_part_tab.Contract)
                          [/highlight]

                          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


                          • #14
                            ein "Inner join" ist nicht das Richtige um zu Prüfen ob es Sätze in Purchase_part_tab gibt, die nicht in der Inventory_part_tab sind.
                            dieses prüft ein "(left) outer join". In dem du in einem umschließenden SQL nach NULL-Werten aus der rechten Tabelle fragst.
                            Oder das SQL von Falk, mit umschließenden SQL ...

                            Bei meinem SQL habe ich nur die zweite join-Bedingung vergessen:
                            SELECT Note_id from (
                            SELECT Note_id, (SELECT Note_ID FROM Purchase_part_tab b WHERE b.Part_no = a.part_no and Purchase_part_tab.Contract = Inventory_part_tab.Contract) id
                            FROM inventory_part_tab a
                            ) WHERE id IS NULL

                            Comment


                            • #15
                              Super, so hats funktioniert...
                              es gibt einen datensatz wo die note_id im inventory_part null ist :-(

                              A Bunch of Thanks!!! :-)

                              Comment

                              Working...
                              X