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]$'`
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]$'`
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
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 '% `
Dies wird nicht basierend auf der Spalte _name_ ausgewählt, nur für die Spalte _value_. –
Es ist eine schlechte Praxis Daten über mehrere Spalten spreizen. Es kann besser sein, eine andere Tabelle mit den verschiedenen Q's zu haben. –