Announcement

Collapse
No announcement yet.

Problem bei vergabe einer laufenden Nummer

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

  • Problem bei vergabe einer laufenden Nummer

    Hallo,

    folgendes Scenario:

    Tabelle 1 mit drei indezierten Spalten (S3 = fortlaufende Nummer, bedingt durch Index) mit folgenden Werten:
    S1|S2|S3
    ---|----|--
    10|10|1
    10|10|2
    10|10|3
    11|11|1
    11|11|2
    11|11|3
    12|12|1 u.s.w

    Tabelle 2 mit drei Spalten ohne Index mit folgenden Werten:
    S1|S2|S3
    ---|----|--
    10|10|1
    10|10|1
    10|10|2
    11|11|1
    11|11|1
    11|11|2
    11|11|2
    11|11|3
    11|11|3
    11|11|4
    11|11|4
    12|12|1 u.s.w mehrfach vorkommende Werte, da kein INDEX!

    Jetzt sollen die Werte aus Tabelle 2 mit in Tabelle 1 einfließen.

    EDIT:

    Hier die Tabelle wie sie nach Update aussehen soll:

    S1|S2|S3
    ---|----|--
    10|10|1
    10|10|2
    10|10|3
    11|11|1
    11|11|2
    11|11|3
    12|12|1
    10|10|4 <- aus Tabelle 2
    10|10|5 <- aus Tabelle 2
    10|10|6 <- aus Tabelle 2
    11|11|4 <- aus Tabelle 2
    11|11|5 <- aus Tabelle 2
    11|11|6 <- aus Tabelle 2
    11|11|7 <- aus Tabelle 2
    11|11|8 <- aus Tabelle 2
    11|11|9 <- aus Tabelle 2
    11|11|10 <- aus Tabelle 2
    11|11|11 <- aus Tabelle 2
    TIDE:

    Die vorhergegangene Lösung geht nicht mehr S3 = S3 + (select max(S3) from Tabelle1...)!

    Ich vermute mit einem normalen SQL-Statement kommt man da nicht weiter, doch habe ich keine Ahnung von Funktionen und Triggern.

    Für einen Hinweis wo ich suchen muss, bis hin zu einem Lösungsvorschlag bin ich überdurchschnittlich dankbar.

    MfG Headscratch
    Zuletzt editiert von Headscratch; 09.11.2007, 14:02.

  • #2
    Hallo Headscratch,

    wenn ich das ganze richtig verstehe, willst Du die doppelten Werte aus
    Tabelle2 nicht in Tabelle1 haben.
    Der Update für Tabelle2 aus der alten Lösung geht doch nach wie vor.
    Lediglich beim INSERT mußt Du schreiben:

    INSERT INTO Tabelle1 SELECT DISTINCT FROM Tabelle2.

    Gruß frauwue
    docendo discimus

    Comment


    • #3
      @frauwue

      Danke dass Sie sich meinem Problem angenommen haben, habe leider die Ergebnistabelle vergessen einzufügen, womit mein Problem deutlicher wird, habe dieses jetzt nachgeholt. Sorry.

      Mir raucht schon der Kopf vom glubschen

      THX Headscratch

      Comment


      • #4
        Hallo Headscratch,

        nach dem Anlegen von zwei Hilfstabellen t3 und t4 mit dem gleichen Schema geht das eigentlich ganz einfach:

        Insert into t3 select * from tabelle2 Order by s1,s2,s3;

        Update t3 set s3=rowid;

        (Rowid ist die interne laufende Satznummer bei INFORMIX; Man könnte stattdessen auch ein Serialfeld kreieren)

        Insert into t4 Select s1,s2,min(s3) from t3
        group by s1,s2;

        Update t3 set t3.s3=t3.s3+1
        -(select t4.s3 from t4 where t3.s1=t4.s1 and t3.s2=t4.s2)


        Nun hat man in t3 den Inhalt von Tabelle2 wie in dem früheren Beitrag und kann wie gehabt weitermachen.
        Einfacher ist es natürlich, wenn man das ganze innerhalb einer Software löst.

        Gruß frauwue

        (Ich hoffe, es sind keine Schreibfehler drin)
        docendo discimus

        Comment


        • #5
          Hallo frauwue,

          ich hatte vorher mit temporären Tabellen gearbeitet und habe jetzt eine eigene "created", beim import von Datensätzen musste ich leider feststellen, dass die Rowid aus der Ursprungstabelle übernommen wird. Nunja, aber ich arbeite an einer Lösung des Problems.

          Thx Headscratch

          Comment


          • #6
            Hallo Headsccratch,

            dann kreiere vorm Import doch noch ein Feld s4 vom Typ serial,
            das zählt sich dann beim Insert auf jeden Fall automatisch hoch.

            Gruß frauwue
            docendo discimus

            Comment

            Working...
            X