Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como selecionar nomes de colunas dinamicamente no mySQL


Experimente 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;

Alguns problemas:

Você provavelmente desejará algum tipo de ORDER BY em seu conjunto de resultados.

Há um limite para o que você pode fazer em termos de junções e coisas.

Você move a validação para o tempo de execução, onde é mais provável que seja perdida pelo teste.

Você espera ser capaz de lidar com alterações de esquema facilmente. Esta técnica só irá lidar com alterações de esquema de um determinado tipo que você pode prever, e outras você provavelmente terá que alterar esse código de qualquer maneira.