sql >> Base de Datos >  >> RDS >> Mysql

Cómo seleccionar nombres de columna dinámicamente en mySQL

Pruebe este 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;

Algunos problemas:

Es probable que desee algún tipo de ORDEN POR en su conjunto de resultados.

Hay un límite de lo que puede hacer en términos de uniones y demás.

Mueva la validación al tiempo de ejecución, donde es más probable que la prueba la pase por alto.

Espera poder manejar los cambios de esquema fácilmente. Esta técnica solo manejará cambios de esquema de cierto tipo que pueda prever, y otros probablemente tendrá que cambiar este código de todos modos.