我想选择列名,但我事先不知道表结构,并且它可能会改变,所以我不能只用列名对 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 http://sqlfiddle.com/#!9/924e8/1:
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。
在连接和其他方面,您可以做的事情是有限的。
您将验证移至运行时,测试更有可能错过它。
您希望能够轻松处理架构更改。此技术将仅处理您可以预见的某种类型的架构更改,而对于其他类型,您可能无论如何都必须更改此代码。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)