如何在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

回到顶部