Mysql
 sql >> Datenbank >  >> RDS >> Mysql

So wählen Sie Spaltennamen in mySQL dynamisch aus

Probieren Sie dieses SQLFiddle aus :

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;

Einige Probleme:

Wahrscheinlich möchten Sie eine Art ORDER BY für Ihre Ergebnismenge.

Es gibt eine Grenze für das, was Sie in Bezug auf Joins und andere Dinge tun können.

Sie verschieben die Validierung in die Laufzeit, wo sie beim Testen eher übersehen wird.

Sie hoffen, Schemaänderungen einfach handhaben zu können. Diese Technik behandelt nur Schemaänderungen eines bestimmten Typs, den Sie vorhersehen können, und bei anderen müssen Sie diesen Code wahrscheinlich sowieso ändern.