Mysql
 sql >> Database >  >> RDS >> Mysql

Come selezionare dinamicamente i nomi delle colonne in MySQL

Prova questo 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;

Alcuni problemi:

Probabilmente vorrai una sorta di ORDER BY sul tuo set di risultati.

C'è un limite a ciò che puoi fare in termini di join e altro.

Sposta la convalida in runtime, dove è più probabile che non venga eseguita durante il test.

Speri di essere in grado di gestire facilmente le modifiche allo schema. Questa tecnica gestirà solo le modifiche allo schema di un certo tipo che puoi prevedere e altre probabilmente dovrai comunque modificare questo codice.