Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak dynamicznie wybierać nazwy kolumn w mySQL?

Wypróbuj ten 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;

Niektóre problemy:

Prawdopodobnie będziesz potrzebować pewnego rodzaju ORDER BY w swoim zestawie wyników.

Istnieje limit tego, co możesz zrobić, jeśli chodzi o łączenia i inne rzeczy.

Przenosisz walidację do środowiska wykonawczego, gdzie jest bardziej prawdopodobne, że zostanie pominięta podczas testowania.

Masz nadzieję, że będziesz w stanie łatwo obsługiwać zmiany schematu. Ta technika poradzi sobie tylko ze zmianami schematu określonego typu, który możesz przewidzieć, a inne prawdopodobnie i tak będziesz musiał zmienić ten kod.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak działa wstawianie Hibernate Batch?

  2. Jak wygenerować unikalny, losowy ciąg dla jednej z moich kolumn tabeli MySql?

  3. zrobić ID w tabeli mysql auto_increment (po fakcie)

  4. Jaki jest odpowiednik MySQL funkcji CHOOSE() w SQL Server?

  5. Jak uruchomić funkcję mysqli connect?