Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

variable Werte innerhalb eines Update-Statements

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von little beagle, 18 September 2012.

  1. little beagle

    little beagle Neuer Benutzer

    Hallo Foristi,

    ich habe folgendes Anliegen:

    Ich habe eine Datensatztabelle in der Form (vereinfacht):

    pid | name | sorting

    Nun habe ich in dieser Tabelle Daten, die innerhalb einer pid sortiert sind. z.B.

    1 | Name1 | 1
    1 | Name2 | 2
    1 | Name3 | 3

    und

    2 | Name2 | 1
    2 | Name1 | 2
    2 | Name3 | 3

    und benötige nun ein SQL-Statement, das mir den Datenteil mit der pid genauso sortiert
    (also das sorting-Feld updated) wie die entsprechenden Daten in pid1.

    Etwas in der Art

    UPDATE table SET sorting={SELECT sorting from table where pid=1 and name=name} WHERE pid=2

    im Ergebnis also

    1 | Name1 | 1
    1 | Name2 | 2
    1 | Name3 | 3
    2 | Name2 | 2
    2 | Name1 | 1
    2 | Name3 | 3

    Allerdings habe ich keine Idee, wie ich MySQL das beibringe? Oder muss ich da zwingend mit einer externen Programmierlogik an den Start?

    Vielen Dank für jede Hilfe
     
  2. ukulele

    ukulele Datenbank-Guru

    Müsste das Ergebnis nicht so aus sehen:

    1 | Name1 | 1
    1 | Name2 | 2
    1 | Name3 | 3
    2 | Name1 | 2
    2 | Name2 | 1
    2 | Name3 | 3

    ...sonst stimmt das Ergebnis gar nicht mit deinen Datensätzen überein.

    Das müsste dann in etwa so machbar sein:
    Code:
    SELECT    t1.pid,
            t1.name,
            t1.sorting
    FROM    tabelle t1
    LEFT JOIN tabelle t2 ON t1.name = t2.name
    WHERE    t2.pid = 1
    ORDER BY t1.pid,t2.sorting,t1.sorting
    Wenn t2.pid = 1 werden alle Daten so sortiert, wie in pid 1, sofern der Name auch in pid 1 vor kommt. Notfalls wird auf das sorting der jeweils eigenen pid zurück gegriffen.
     
  3. little beagle

    little beagle Neuer Benutzer

    nein. Ich will die Datensätze (bzw. einen Teil davon) ja eben manipulieren ;-)In welcher Reihenfolge sie dann in der Tabelle stehen, ist mir egal - weil ich sie in meiner Anwendung nach dem Sorting-Feld sortiert ausgebe.

    Also, ich brauche ein Update-Statement, dass den SET-Teil variabel aus einem SELECT über dieselbe Tabelle holt.
     
  4. ukulele

    ukulele Datenbank-Guru

    Ich glaube ich verstehe. Das Problem ist, das man in UPDATE Statements keine Aliasnamen verwenden darf. Aber irgendwo hab ich das neulich gemacht *grübel*
     
  5. little beagle

    little beagle Neuer Benutzer

    Mit einem Schleifenkonstrukt ist das ja auch kein Problem; ich find's nur so herrlich unelegant und bin der Überzeugung, dass man da auch ein geschicktes SQL-Statement finden kann. Aber ich hab leider keine Idee... :-(
     
  6. ukulele

    ukulele Datenbank-Guru

    Versuch mal das hier:
    Code:
    UPDATE    tabelle
    SET        tabelle.sorting = (    SELECT    t1.sorting
                                FROM    tabelle t1
                                WHERE    t1.pid = 1
                                AND        t1.name = tabelle.name )
    WHERE    tabelle.pid = 2
     
  7. little beagle

    little beagle Neuer Benutzer

    Das schaut aus, als ob es funktionieren könnte...

    ich zieh mir heute einen Abzug der Produktivdatenbank, probier das aus und geb Rückmeldung. Vielen Dank schon mal!
     
    Walter gefällt das.
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden