Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Cara memilih nama kolom secara dinamis di mySQL

Coba SQLFiddle ini :

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;

Beberapa masalah:

Anda mungkin menginginkan semacam ORDER BY pada kumpulan hasil Anda.

Ada batasan untuk apa yang dapat Anda lakukan dalam hal bergabung dan lainnya.

Anda memindahkan validasi ke waktu proses yang kemungkinan besar terlewatkan oleh pengujian.

Anda berharap dapat menangani perubahan skema dengan mudah. Teknik ini hanya akan menangani perubahan skema dari jenis tertentu yang dapat Anda ramalkan, dan yang lain Anda mungkin harus mengubah kode ini.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kode Kesalahan MySQL:1411. Nilai datetime salah:'' untuk fungsi str_to_date

  2. Kesalahan MySQL 1436:Tumpukan utas diserbu, dengan kueri sederhana

  3. ROW_NUMBER() di MySQL

  4. Hapus catatan duplikat tanpa membuat tabel sementara

  5. JDBC Pilih batching/fetch-size dengan MySQL