Announcement

Collapse
No announcement yet.

MySQL Spalte inkrementieren

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

  • MySQL Spalte inkrementieren

    Hallo zusammen,

    Ich habe in einer bestehenden MySQL-DB Datensätze, deren Identifier (auftrag) mehrmals vorkommt. Das Feld proofNr soll nun bei jedem Vorkommen um eins erhöht werden. Zur Verdeutlichung folgende Abfrage:
    mysql> SELECT * FROM `korrektur` WHERE `auftrag`= 140802;
    +--------+---------+------------+-------------+----------------+------------+-------------+-----------+---------+-----------+
    | ID | auftrag | ausgang | ausgang_von | ausgang_medium | eingang | eingang_von | druckfrei | proofNr |
    +--------+---------+------------+-------------+----------------+------------+-------------+-----------+---------+-----------+
    | 187649 | 140802 | 2020-09-01 | 29 | 1 | 2020-09-08 | 29 | NULL | | 1 | -> OK
    | 187783 | 140802 | 2020-09-08 | 29 | 1 | 2020-10-08 | 29 | NULL | | 1 | -> 2
    | 188247 | 140802 | 2020-10-08 | 29 | 1 | 2020-10-19 | 29 | NULL | | 1 | -> 3
    | 188395 | 140802 | 2020-10-19 | 29 | 1 | NULL | NULL | NULL | | 1 | -> 4
    +--------+---------+------------+-------------+----------------+------------+-------------+-----------+---------+-----------+
    4 rows in set (0,03 sec)

    Ich hoffe, man versteht, was ich meine.
    Wie kann man das in einer Query lösen? Ich bin dankbar für jede Hilfe!
    Grüsse an alle
    kaeser

  • #2
    Oracle:
    update KORREKTUR set proofNr=rownum WHERE `auftrag`= 140802;

    MYSQL
    https://www.mysqltutorial.org/mysql-row_number/
    Zuletzt editiert von Christian Marquardt; 02.11.2020, 13:55.
    Christian

    Comment


    • #3
      Du solltest überlegen da noch einen Order By dranzuhängen. In deinem Beispiel zeigst du etwas das aussieht wie eine Einfügereihenfolge das ist aber erstmal eher aus der Kategorie Zufall. (Wenn man kein Sortierkriterium angibt liefert die DB die Daten in der Reihenfolge die am schnellsten geht das muss nicht die Einfügereihenfolge sein und diese Reihenfolge kann sich beliebig ändern wegen internen Optimierungen in der Datenbank)

      Comment


      • #4
        Hallo zusammen. Erst mal Entschuldigung für meine lange Abwesenheit: ich hatte heftige Zahnschmerzen.
        Und dann natürlich danke für die Lösungsvorschläge.
        Ich habe, für MySQL, folgende Lösung zudammengefrickelt:
        [highlight=sql]WITH cte AS (SELECT ID, ROW_NUMBER() OVER w proofNr_correct FROM korrektur_copy WINDOW w AS (PARTITION BY ID)) UPDATE korrektur_copy JOIN cte ON cte.ID = korrektur_copy.ID SET korrektur_copy.proofNr = cte.proofNr_correct WHERE auftrag = 140802;[/highlight]
        Das funktioniert als Abfrage auch, aber das ResultSet sagt folgendes:
        [highlight=sql]Query OK, 0 rows affected (0.59 sec)
        Rows matched: 4 Changed: 0 Warnings: 0[/highlight]
        In der Datenbank passiert auch tatsächlich nichts. Hat jemand eine Idee?
        Gruss
        kaeser

        Comment

        Working...
        X