Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment sélectionner dynamiquement les noms de colonnes dans mySQL

Essayez ceci 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 @query
FROM INFORMATION_SCHEMA.COLUMNS c
WHERE c.TABLE_NAME = 'atable'
  AND c.COLUMN_NAME LIKE 'prefix%'
ORDER BY c.ORDINAL_POSITION;

PREPARE stmt FROM @query;

EXECUTE stmt;

Quelques problèmes :

Vous voudrez probablement une sorte de ORDER BY sur votre ensemble de résultats.

Il y a une limite à ce que vous pouvez faire en termes de jointures et autres.

Vous déplacez la validation vers l'exécution où elle est plus susceptible d'être manquée par les tests.

Vous espérez pouvoir gérer facilement les changements de schéma. Cette technique ne gérera que les changements de schéma d'un certain type que vous pouvez prévoir, et d'autres vous devrez probablement changer ce code de toute façon.