sql >> Databasteknik >  >> RDS >> Mysql

Hur man väljer kolumnnamn dynamiskt i mySQL

Prova denna SQLFiddle :

CREATE TABLE atable ( prefix1 VARCHAR(10) ,prefix2 VARCHAR(10) ,notprefix3 INT ,notprefix4 INT);INSERT INTO atable VALUES ('qwer qwer', 'qwerqwer', 1, 1);INSERT INTO atable VALUES ('qwer qwer', 'asdfaasd', 1, 1);INSERT INTO atable VALUES ('qwer qwer', 'qrt vbb', 1, 1);INSERT INTO atable VALUES ('qwer qwer', 'sdfg sdg ', 1, 1);SELECT CONCAT('SELECT ', GROUP_CONCAT(c.COLUMN_NAME), 'FROM atable;')INTO @queryFROM INFORMATION_SCHEMA.COLUMNS cWHERE c.TABLE_NAME ='atable' OCH c.COLUMN_NAME SOM 'prefix%' BESTÄLL EFTER c.ORDINAL_POSITION;PREPAR STMT FROM @query;EXECUTE stmt;

Några problem:

Du kommer förmodligen att vilja ha någon form av ORDER BY på din resultatuppsättning.

Det finns en gräns för vad du kan göra när det gäller sammanfogningar och saker.

Du flyttar validering till körning där det är mer sannolikt att det missas genom att testa.

Du hoppas kunna hantera schemaändringar enkelt. Denna teknik kommer bara att hantera schemaändringar av en viss typ som du kan förutse, och andra kommer du förmodligen att behöva ändra den här koden ändå.




  1. Subtrahera en månad från ett datum i MariaDB

  2. SQL INTERSECT

  3. Hur man framgångsrikt skriver om gammal mysql-php-kod med föråldrade mysql_*-funktioner?

  4. Få positionen för en karaktär i en sträng i SQLite med Instr()