variable Werte innerhalb eines Update-Statements

little beagle

Neuer Benutzer
Beiträge
4
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
 
Werbung:

ukulele

Datenbank-Guru
Beiträge
4.582
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.
 

little beagle

Neuer Benutzer
Beiträge
4
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.
 

ukulele

Datenbank-Guru
Beiträge
4.582
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*
 

little beagle

Neuer Benutzer
Beiträge
4
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... :-(
 

ukulele

Datenbank-Guru
Beiträge
4.582
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
 
Werbung:
Oben