The*_*ker 5 mysql sql metadata dynamic-sql
我想选择列名但我不知道表结构,它可能会改变所以我不能只用列名硬编码select语句.我也不想选择每一列.有没有简单的方法来做到这一点?
我的想法是这两个查询的某种组合,但我的SQL不是那么好.
SHOW COLUMNS FROM table_name;
SELECT * FROM table_name;
Run Code Online (Sandbox Code Playgroud)
我尝试使用子选择,但它没有用.似乎没有发生任何事情,我没有得到错误我没有得到任何结果
SELECT (SELECT column_name
FROM information_schema.columns
WHERE table_name ='table_name')
FROM table_name;
Run Code Online (Sandbox Code Playgroud)
也许我需要加入?..无论如何,任何帮助都会很棒,谢谢
试试这个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;
Run Code Online (Sandbox Code Playgroud)
一些问题:
您可能需要对结果集进行某种 ORDER BY。
在连接和事务方面您可以做的事情是有限的。
您将验证移至运行时,测试更有可能错过它。
您希望能够轻松处理架构更改。此技术将仅处理您可以预见的某种类型的架构更改,而对于其他类型,您可能无论如何都必须更改此代码。
| 归档时间: |
|
| 查看次数: |
10703 次 |
| 最近记录: |