2012-03-24 13 views
0

Alle Tabellen in meiner Datenbank haben immer eine ID (autoincrement), in Spalte 0 ist sie unabhängig von ihrem Namen immer vorhanden.Referenzspalte in mysql where-Klausel nach Index

Also, in der Tabelle testete ich wahrscheinlich idTeste, in Tabelle Autos habe ich idCars haben sollte, aber das Format ist kein Standard, könnte ich eine Tabelle Beispiel mit einer Spalte habe einfach genannt id.

Ich versuche, eine generische Update erstellen wie:

update tablename set bla='ble' where column[0]='id'; 

so, nicht die Spaltennamen keine Rolle, ich wünschte, es durch seine ID zu verweisen. Ist das möglich?

Ich weiß, ich kann so etwas tun:

show columns from table 

und die ersten Namen holen, bevor mein Update ausführen, und in der Tat, ich habe mein Problem zu lösen, aber ich bin gespannt, ob es möglich.

Antwort

1

Was Sie suchen, heißt Ordnungszahl oder einfach "Ordinal".

SQL unterstützt die Verwendung von Ordinalzahlen in der WHERE-Klausel nicht. Unterstützung für ordinals unterscheidet zwischen Datenbank-Anbietern - die häufigste Unterstützung ist in der ORDER BY Klausel:

ORDER BY 2, 1 

..., die in der SELECT Klausel aufgelistet auf der Spalte (n) beruht. Einige unterstützen Ordinalzahlen in der GROUP BY Klausel.

Das heißt, die Verwendung von Ordinalzahlen ist keine empfohlene Vorgehensweise, da sie von der Reihenfolge der Spalten in der SELECT-Klausel abhängt. Wenn sich diese Reihenfolge ändert, ohne dass ORDER BY/etc aktualisiert wird, wissen Sie erst zur Laufzeit.

+0

Ja, ich glaube, das ist nicht möglich. Ich finde einen Weg, um den Spaltennamen nach seiner Ordinalposition zu bekommen, aber ich konnte ihn nicht in meiner update where-Klausel verwenden. Ich wählte 'COLUMN_NAME aus information_schema.COLUMNS, wobei TABLE_NAME =" mytable "und ORDINAL_POSITION = 1', aber etwas wie' update SQLstat set Script = "buga" wo (wählen Sie COLUMN_NAME aus information_schema.COLUMNS wobei TABLE_NAME = "SQLstat" und ORDINAL_POSITION = 1) = 12' nicht funktionieren ... Ich behalte meine aktuelle Lösung ... Danke! –