2016-03-24 9 views
1

Ich möchte mehrere Spalten aktualisieren, die ähnliche Namen haben. Ist es in MySQL möglich?Aktualisiere Spalten wie in MySQL

Etwas wie folgt aus:

update `my_table` set `column` = 0 where `column` regexp `'Q%[0-9]$'` 
+0

Es ist eine schlechte Praxis Daten über mehrere Spalten spreizen. Es kann besser sein, eine andere Tabelle mit den verschiedenen Q's zu haben. –

Antwort

1

Versuchen Sie dies. Sie erfordern den Einsatz von sys-Datenbanktabellen die Spaltennamen zu erhalten, so dass Sie Ihre SQL richtig einstellen:

DECLARE @tableName varchar(10) 
SET @tableName = 'yourtablenamehere' 

DECLARE @sql VARCHAR(MAX) 
SET @sql = '' 

SELECT @sql = @sql + 'UPDATE ' + @tableName + ' SET ' + c.name + ' = '''' WHERE ' + c.name + ' IS NULL ;' 
FROM sys.columns c 
INNER JOIN sys.tables t ON c.object_id = t.object_id 
INNER JOIN sys.types y ON c.system_type_id = y.system_type_id 
WHERE t.name = @tableName 
and c.name regexp `'Q%[0-9]$'` 

EXEC (@sql) 

Referenz: Dynamic update statement with variable column names

0

Wenn Sie Spaltenwert versuchen, auf den Spaltennamen basiert bearbeiten Sie dann kann Wildcard "like" verwenden. Es macht die Abfrage optimiert und läuft viel schneller. So etwas wie unten sollte funktionieren:

Update my_table column = 0 gesetzt wo column wie '%' column_name '% `

+0

Dies wird nicht basierend auf der Spalte _name_ ausgewählt, nur für die Spalte _value_. –