Announcement

Collapse
No announcement yet.

Frage: update/insert der besonderen Art für INFORMIX-SQL

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

  • Frage: update/insert der besonderen Art für INFORMIX-SQL

    Hallo,

    folgende Abfrage will mir einfach nicht gelingen:

    Tabelle 1 mit folgenden Spalten und Werten:

    ID |HERSTELLER|MARKE |LFD_NR
    ------|---------------|-----------|-----------
    0815|OPEL |MANTA |000001
    0815|OPEL |MANTA |000002
    0815|OPEL |MANTA |000003
    0815|OPEL |CORSA |000001
    0815|OPEL |ASCONA |000001

    Index auf HERSTELLER, MARKE und LFD_NR
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    Tabelle 2 mit folgenden Spalten und Werten:

    ID |HERSTELLER|MARKE |LFD_NR
    ------|---------------|-----------|-----------
    0816|OPEL |MANTA |000001
    0816|OPEL |MANTA |000002
    0816|OPEL |MANTA |000003
    0816|OPEL |CORSA |000001
    0816|OPEL |ASCONA |000001

    Index auf HERSTELLER, MARKE und LFD_NR

    Jetzt sollen die Werte aus Tabelle 2 irgendwie mit in Tabelle 1, Ergebnis:
    ID |HERSTELLER|MARKE |LFD_NR
    ------|---------------|-----------|-----------
    0815|OPEL |MANTA |000001
    0815|OPEL |MANTA |000002
    0815|OPEL |MANTA |000003
    0815|OPEL |CORSA |000001
    0815|OPEL |ASCONA |000001
    0816|OPEL |MANTA |000004
    0816|OPEL |MANTA |000005
    0816|OPEL |MANTA |000006
    0816|OPEL |CORSA |000002
    0816|OPEL |ASCONA |000002

    Eine Lösung wäre jetzt zuerst eine update auf tabelle 2, dazu jede LFD_NR aus Tabelle 2 mit der max(LFD_NR) aus Tabelle 1 zu summieren - KLAUSEL: where tabelle1.HERSTELLER = tabelle2.HERSTELLER and tabelle1.MARKE = tabelle2.MARKE.
    Wenn tabelle 2 dann upgedatet ist, kann ein insert der tabelle 2 in tabelle 1 ohne Probleme laufen.
    Die ID wird nicht berücksichtigt.

    Nur wie setze ich das als vernünftiges Statement ab?

    Für jeden Lösungsvorschlag/Lösung bin ich überdurchschnittlich dankbar
    Zuletzt editiert von Headscratch; 07.11.2007, 10:06.

  • #2
    Hallo!

    Ohne die Informix Spezifikas zu kennen oder es gestestet zu haben:

    alter table tabelle2 add neulfd_nr integer
    update tabelle2 set neulfd_nr = (select max(a.lfd_nr) from tabelle1 a where a.marke = tabelle1.marke and a.hersteller = tabelle2.hersteller) + tabelle2.lfd_nr

    dann im insert neulfd_nr statt lfd_nr und fertig...

    BYE BERND

    Comment


    • #3
      Hallo,

      vielleicht soltest Du den Inhalt Deiner Tabellen vosichtshalber in einer
      ASCII Datei sichern (falls etwas schiefgeht).
      Der Update sieht so aus:

      update tabelle2 set tabelle2.LFD_nr=Tabelle2.LFD_nr+
      (select Max(LFD_nr) from tabelle1
      where tabelle1.HERSTELLER = tabelle2.HERSTELLER and tabelle1.MARKE = tabelle2.MARKE)
      where exists (select * from tabelle1 where
      tabelle1.HERSTELLER = tabelle2.HERSTELLER
      and tabelle1.MARKE = tabelle2.MARKE and tabelle1.LFD_NR is Not Null)

      Die äußere WHERE Klausel sichert ab, dass Du keinen NULL Wert zu Deiner Nummer addierst. Das würde nämlich als Ergebnis NULL liefern.

      Der Insert sieht dann so aus:

      Insert into Tabelle1 select * from Tabelle2

      Gruß frauwue
      Zuletzt editiert von frauwue; 07.11.2007, 17:35. Reason: (Ich hatte mich leider verschrieben sorry)
      docendo discimus

      Comment


      • #4
        Erstmal herzlichen Dank an Bernd und frauwue für die schnelle Hilfe:

        @Bernd:
        Danke, das war der Löser, wenig statement (kleine Korrektur: "a.marke = tabelle2.marke") aber voller Erfolg...thx

        @frauwue
        Diese Option werde ich morgen ebenfalls mal probieren und die Bedeutung von "exists" Nachschlagen... ich will ja schliesslich was lernen ).

        Also Danke nochmal für die freundliche Hilfe.

        Grüße Headscratch

        p.s. danke auch an den/die Moderatoren für's korrekte plazieren

        Comment


        • #5
          Hallo,

          exists bedeutet einfach, ob irgendein Datensatz existiert, für den die angegebenen Kriterien erfüllt sind. Ich habe diese Bedingung eingefügt,
          für den Fall, dass Du z. B. in Tabelle 2 Autos hast, die in Tabelle 1 nicht
          vorkommen, dann würden nämlich deine Updates falsch werden (auch in dem Lösungsvorschlag von Bernd wären sie falsch geworden).

          Gruß frauwue
          docendo discimus

          Comment


          • #6
            @frauwue
            Da habe ich in meiner Euphorie diesen Fehler nicht bemerkt: "Nie wieder Euphorie" (D.R.)

            Dieses kleine "where exists" ist die Lösung für all meine Probleme mit UPDATE, INSERT, DELETE, jetzt brauche ich auch keine zusätliche Spalte mehr.
            Ich habe so oft "geglubscht" wie man Tabellen in Beziehung einer anderen Tabelle UPDATED,INSERTED,DELETED, aber nie bin ich auf ein "where exists" gestoßen... gut , ist jetzt auch ein paar Jahre her. Natürlich hätte mir auch die eine oder andere Lektüre helfen können, aber wer so lesefaul ist wie ich.

            Ich danke Euch noch mal ganz herzlich für diese Lösungsvorschläge.

            Grüße Headscratch
            Zuletzt editiert von Headscratch; 08.11.2007, 10:01. Reason: while exists durch where exists korrigiert

            Comment

            Working...
            X