Klaus sieht schwarz: Select und Update in ein MySQL-Ausdruck

Hallo Jungs und Mädels

ich suche vergeblich auf mysql.de nach einer Möglichkeit, wie ich eine Select Anweisung mit einer Update-Anweisung kombinieren kann

Ich möchte alle Zeilen in einer Spalte abrufen und sie in einer anderen Spalte/Zeile eintragen

wie kann man den Update und Select kombinieren?

ich hab gestern irgendwo gelesen, dass so eien Abfrage nur mit MySQL 5 funktioniert, ich müsste das aber irgendwie unter MySQL 4 hinbekommen

danke

  1. Hallo Klaus,

    Ich möchte alle Zeilen in einer Spalte abrufen und sie in einer anderen Spalte/Zeile eintragen

    Bitte erkläre das genauer.
    Möchtest Du alle Werte aus Spalte X in Spalte U eintragen?

    Dazu benötigst Du noch nicht einmal Subqueries.

    UPDATE Deine_Tabelle SET U = X

    Oder etwas anderes?

    wie kann man den Update und Select kombinieren?

    ich hab gestern irgendwo gelesen, dass so eien Abfrage nur mit MySQL 5 funktioniert, ich müsste das aber irgendwie unter MySQL 4 hinbekommen

    Ab 4.1 werden Subqueries unterstützt, siehe http://dev.mysql.com/doc/mysql/en/subqueries.html

    Beachte bitte die Einschränkung im letzten Absatz:

    <zitat>
    One restriction is that currently you cannot modify a table and select from the same table in a subquery. This applies to statements such as DELETE, INSERT, REPLACE, and UPDATE.
    </zitat>

    Freundliche Grüsse,

    Vinzenz

    1. Hallo Vinzenz :-)

      Ich möchte alle Zeilen in einer Spalte abrufen und sie in einer anderen Spalte/Zeile eintragen

      Bitte erkläre das genauer.
      Möchtest Du alle Werte aus Spalte X in Spalte U eintragen?

      Dazu benötigst Du noch nicht einmal Subqueries.

      UPDATE Deine_Tabelle SET U = X

      ich möchte aus 2 Spalten von einer anderen Tabelle den Wert Abfrage un in den Datensatz mit der selben ID eintragen

      wie kann man den Update und Select kombinieren?

      ich hab gestern irgendwo gelesen, dass so eien Abfrage nur mit MySQL 5 funktioniert, ich müsste das aber irgendwie unter MySQL 4 hinbekommen

      Ab 4.1 werden Subqueries unterstützt, siehe http://dev.mysql.com/doc/mysql/en/subqueries.html

      Beachte bitte die Einschränkung im letzten Absatz:

      <zitat>
      One restriction is that currently you cannot modify a table and select from the same table in a subquery. This applies to statements such as DELETE, INSERT, REPLACE, and UPDATE.
      </zitat>

      das heisst also... dass sich das erledigt hat udn mir nur eien Programmiersprache wie PHP übrigbleibt :-/

      1. Hallo Klaus,

        ich möchte aus 2 Spalten von einer anderen Tabelle den Wert Abfrage un in den Datensatz mit der selben ID eintragen

        Szenario

        Aus Tabelle A:
        id  sp1  sp2 ...

        in Tabelle B:

        id  sp1  sp2 ... [weitere Spalten]

        Ab 4.1 werden Subqueries unterstützt, siehe http://dev.mysql.com/doc/mysql/en/subqueries.html
        Beachte bitte die Einschränkung im letzten Absatz:
        <zitat>
        One restriction is that currently you cannot modify a table and select from the same table in a subquery. This applies to statements such as DELETE, INSERT, REPLACE, and UPDATE.

        das heisst also... dass sich das erledigt hat udn mir nur eien Programmiersprache wie PHP übrigbleibt :-/

        Die Subquery bezieht sich doch nicht auf die Tabelle,
        in die Du einfügen willst.

        Somit sollte es gehen, sofern
        Deine MySQL-Version mindestens 4.1 ist.

        Freundliche Grüsse,

        Vinzenz

        1. Hallo,

          ich möchte aus 2 Spalten von einer anderen Tabelle den Wert Abfrage un in den Datensatz mit der selben ID eintragen

          Szenario

          Aus Tabelle A:
          id  sp1  sp2 ...

          in Tabelle B:
          id  sp1  sp2 ... [weitere Spalten]

          in Tabelle B soll nachher alles in einer Tabelel stehen

          Ab 4.1 werden Subqueries unterstützt, siehe http://dev.mysql.com/doc/mysql/en/subqueries.html
          Beachte bitte die Einschränkung im letzten Absatz:
          <zitat>
          One restriction is that currently you cannot modify a table and select from the same table in a subquery. This applies to statements such as DELETE, INSERT, REPLACE, and UPDATE.

          das heisst also... dass sich das erledigt hat udn mir nur eien Programmiersprache wie PHP übrigbleibt :-/

          Die Subquery bezieht sich doch nicht auf die Tabelle,
          in die Du einfügen willst.

          Somit sollte es gehen, sofern
          Deine MySQL-Version mindestens 4.1 ist.

          ich habe _nur_ MySQL 4 zur Verfügung

          mfg
          Twilo

          1. Hallo Klaus,

            ich möchte aus 2 Spalten von einer anderen Tabelle den Wert Abfrage un in den Datensatz mit der selben ID eintragen

            Szenario

            Aus Tabelle A:
            id  sp1  sp2 ...

            in Tabelle B:
            id  sp1  sp2 ... [weitere Spalten]

            in Tabelle B soll nachher alles in einer Tabelel stehen

            In einer Spalte? Verwende die Funktion CONCAT, siehe
            http://dev.mysql.com/doc/mysql/en/string-functions.html.

            ich habe _nur_ MySQL 4 zur Verfügung

            4.0.4 benötigst Du, denn Subqueries sind nicht erforderlich.
            Du musst nur ein Multiple-Table-Update durchführen mit einem
            INNER JOIN auf ID.

            Freundliche Grüsse,

            Vinzenz

          2. Hallo Klaus alias Twilo,

            war das Doppelposting zu https://forum.selfhtml.org/?t=101006&m=619579 wirklich nötig? Und lies bitte wahsagas Posting https://forum.selfhtml.org/?t=101006&m=619928, volle drei Minuten vor meinem abgefasst, mit dem gleichen Tenor.

            In diesem Thread lässt Du Dir von mir mühsam die Informationen aus der Nase ziehen, die im anderen drinstehen. Das wäre wirklich nicht nötig gewesen :-(

            Immer noch freundliche Grüße,

            Vinzenz

            1. Moin

              war das Doppelposting zu https://forum.selfhtml.org/?t=101006&m=619579 wirklich nötig? Und lies bitte wahsagas Posting https://forum.selfhtml.org/?t=101006&m=619928, volle drei Minuten vor meinem abgefasst, mit dem gleichen Tenor.

              In diesem Thread lässt Du Dir von mir mühsam die Informationen aus der Nase ziehen, die im anderen drinstehen. Das wäre wirklich nicht nötig gewesen :-(

              ich bin nicht Twilo

              ich wollte etwas von Twilo einfügen, hatte es dann aber rausgelöscht, anscheint zu wenig :-/
              ich hatte gesehen, dass er ein ähnliches Problem hat

              1. Hallo Klaus,

                ich bin nicht Twilo

                Dann entschuldige bitte meinen Vorwurf des Doppelpostings.

                ich wollte etwas von Twilo einfügen, hatte es dann aber rausgelöscht, anscheint zu wenig :-/
                ich hatte gesehen, dass er ein ähnliches Problem hat

                Er will, soweit ich das erkennen kann, das gleiche.
                Was hast Du mit CONCAT() erreicht?

                Freundliche Grüsse,

                Vinzenz

                1. Hallo Vinzenz

                  ich bin nicht Twilo

                  Dann entschuldige bitte meinen Vorwurf des Doppelpostings.

                  keine Problem :)

                  ich wollte etwas von Twilo einfügen, hatte es dann aber rausgelöscht, anscheint zu wenig :-/
                  ich hatte gesehen, dass er ein ähnliches Problem hat

                  Er will, soweit ich das erkennen kann, das gleiche.
                  Was hast Du mit CONCAT() erreicht?

                  ich habe damit den Vor- und Nachnamen verbunden, im Format "Vorname Nachname" nur ist das Problem, ich bekomm zwar, wie beim Select normal ist, nur die Ausgabe, müsste das jetzt aber noch in die eine Spalte einfügen können (die Spalte ist in einer anderen Tabelle)

                  da happert es zur Zeit noch etwas dran

                  Klaus

                  1. Was hast Du mit CONCAT() erreicht?

                    ich habe damit den Vor- und Nachnamen verbunden, im Format "Vorname Nachname" nur ist das Problem, ich bekomm zwar, wie beim Select normal ist, nur die Ausgabe, müsste das jetzt aber noch in die eine Spalte einfügen können (die Spalte ist in einer anderen Tabelle)

                    da happert es zur Zeit noch etwas dran

                    UPDATE tabelle1, tabelle2
                    SET tabelle1.spalte = CONCAT_WS(' ', tabelle2.spalte1, tabelle2.spalte2)
                    WHERE tabelle1.id = tabelle2.id

                    In das UPDATE werden die Tabellen tabelle1 und tabelle2 einbezogen. Geändert wird aber nur tabelle1.spalte1 (im SET-Teil). Durch das WHERE werden die gleich-id-igen Zeilen der beiden Tabellen einander zugeordnet.

                    1. Guten Abend dedlfix

                      Was hast Du mit CONCAT() erreicht?

                      ich habe damit den Vor- und Nachnamen verbunden, im Format "Vorname Nachname" nur ist das Problem, ich bekomm zwar, wie beim Select normal ist, nur die Ausgabe, müsste das jetzt aber noch in die eine Spalte einfügen können (die Spalte ist in einer anderen Tabelle)

                      da happert es zur Zeit noch etwas dran

                      UPDATE tabelle1, tabelle2
                      SET tabelle1.spalte = CONCAT_WS(' ', tabelle2.spalte1, tabelle2.spalte2)
                      WHERE tabelle1.id = tabelle2.id

                      In das UPDATE werden die Tabellen tabelle1 und tabelle2 einbezogen. Geändert wird aber nur tabelle1.spalte1 (im SET-Teil). Durch das WHERE werden die gleich-id-igen Zeilen der beiden Tabellen einander zugeordnet.

                      das funktioniert super, prima
                      ich hab das bis jetzt noch nirgends gelesen, dass man das so machen kann

                      danke, super Sache :-)

                      1. ich hab das bis jetzt noch nirgends gelesen, dass man das so machen kann

                        Steht alles im Handbuch unter UPDATE Syntax (Multiple-table syntax)

  2. http://dev.mysql.com/doc/mysql/de/replace.html

    das Replace wirkt ähnliche wie ein Update,

    kleine Probleme, du musst alle Zeilen neu belegen, also nicht nur die, die du veränderst.

    Falls du ein Update auf sehr viele Zeilen gleichzeitig machen willst - dann gibt es wirklich nur die Möglichkeit mit einer temporary table...
    Das sind etwa 3 weitere SQL-Statements.

    1. Moin

      http://dev.mysql.com/doc/mysql/de/replace.html

      das Replace wirkt ähnliche wie ein Update,

      kleine Probleme, du musst alle Zeilen neu belegen, also nicht nur die, die du veränderst.

      Falls du ein Update auf sehr viele Zeilen gleichzeitig machen willst - dann gibt es wirklich nur die Möglichkeit mit einer temporary table...
      Das sind etwa 3 weitere SQL-Statements.

      ich möchte alle Zeilen abändern

      ok, ich dachte, dass man das alles in einer Abfrage stopfen kann :)