如何在MySQL中动态选择列名
我想选择列名,但我不知道表结构是否会提前更改,因此它可能会发生变化,因此我不能只对带有列名的select语句进行硬编码。我也不想选择每一列。有没有简单的方法可以做到这一点?
我的想法是这两个查询的某种组合,但是我的SQL并不是那么好。
SHOW COLUMNS FROM table_name;SELECT * FROM table_name;
我尝试使用子选择,但没有用。似乎什么都没发生,我没有收到错误,只是没有结果
SELECT (SELECT column_name FROM information_schema.columns
WHERE table_name ='table_name')
FROM table_name;
也许我需要参加吗?..无论如何,任何帮助都将是很大的,谢谢
回答:
试试这个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;
一些问题:
您可能需要对结果集进行某种ORDER BY。
就联接和事物而言,您可以做的事情是有限的。
您将验证移至运行时,在运行时,测试很可能会错过它。
您希望能够轻松处理架构更改。该技术将仅处理您可以预见的某种类型的模式更改,而其他任何情况下您都可能不得不更改此代码。
以上是 如何在MySQL中动态选择列名 的全部内容, 来源链接: utcz.com/qa/428468.html