MySQL 中的动态列选择
在 MySQL 中,可能会出现需要根据未知的表结构或预期检索特定列的情况架构更改。当在 SQL 语句中硬编码列名不切实际时,这就带来了挑战。本文探讨了解决此问题的方法,而无需选择每一列。
利用信息架构
information_schema 数据库包含有关 MySQL 服务器上所有数据库和表的元数据。它包括一个名为 COLUMNS 的表,其中存储有关列的信息,包括列的名称、数据类型和表成员身份。
构造动态查询
动态选择列名称,您可以利用 MySQL 函数和 information_schema.COLUMNS 表的组合。以下是分步方法:
示例 SQL 语句
以下 SQL 语句演示如何动态选择以开头的列名称表中的“前缀” "atable":
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;
输出:
此语句的输出将是包含以下 SQL 语句的单行:
SELECT prefix1, prefix2 FROM atable;
通过执行此语句,您将仅从“atable”中检索列“prefix1”和“prefix2”表。
以上是如何使用信息模式动态选择 MySQL 中的列?的详细内容。更多信息请关注PHP中文网其他相关文章!