sql >> Databáze >  >> RDS >> Mysql

Jak dynamicky vybírat názvy sloupců v mySQL

Vyzkoušejte tento 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;

Některé problémy:

Pravděpodobně budete chtít nějaký druh ORDER BY ve své sadě výsledků.

Existuje limit toho, co můžete dělat, pokud jde o připojení a další věci.

Ověření přesunete do běhového prostředí, kde je pravděpodobnější, že bude při testování ztraceno.

Doufáte, že snadno zvládnete změny schématu. Tato technika si poradí pouze se změnami schématu určitého typu, který můžete předvídat, au ostatních budete pravděpodobně muset tento kód změnit tak jako tak.




  1. Jak SUBTIME() funguje v MariaDB

  2. vrátit mysql boolean jako „ano“ nebo „ne“

  3. Seznam všech indexů a indexových sloupců v SQL Server DB

  4. Přejmenování sloupce v SQL Server (T-SQL)