sql >> Database >  >> RDS >> Mysql

Hoe kolomnamen dynamisch te selecteren in mySQL

Probeer deze 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;

Enkele problemen:

U wilt waarschijnlijk een soort ORDER BY op uw resultatenset.

Er is een limiet aan wat je kunt doen op het gebied van joins en zo.

Je verplaatst validatie naar runtime, waar de kans groter is dat deze wordt gemist door te testen.

U hoopt schemawijzigingen gemakkelijk te kunnen verwerken. Deze techniek verwerkt alleen schemawijzigingen van een bepaald type dat u kunt voorzien, en voor andere zult u deze code waarschijnlijk toch moeten wijzigen.




  1. Hoe de naam van de weekdag van een datum te krijgen?

  2. Oracle Express Edition voor SQL Practice installeren

  3. Hoe gebruik ik regex in MySQL?

  4. Alternatief voor NOT IN op MySQL