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:
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.
 
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.
 
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*
 
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... :-(
 
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:
Zurück
Oben