当前位置: 首页 > 面试题库 >

如何在MySQL中动态选择列名

葛修真
2023-03-14
问题内容

我想选择列名,但我不知道表结构是否会提前更改,因此它可能会发生变化,因此我不能只对带有列名的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。

就联接和事物而言,您可以做的事情是有限的。

您将验证移至运行时,在运行时,测试很可能会错过它。

您希望能够轻松处理架构更改。该技术将仅处理您可以预见的某种类型的模式更改,而其他任何情况下您都可能不得不更改此代码。



 类似资料:
  • 问题内容: 是否可以遍历这样的表: 变成这个: 目的是选择所有s并将它们用作列。作为行,我喜欢使用所有s。 所有条件: 所有类型 但是如何将它们组合成一个视图或某物。像这样? 如果您喜欢玩数据。这是生成表的脚本: 问题答案: 不幸的是,MySQL没有您基本上想做的功能。因此,您将需要在语句中使用聚合函数: 参见带有演示的SQL Fiddle 现在,如果您要动态执行此操作,这意味着您不知道要转置的列

  • 问题内容: 我知道这个问题已经被问过很多次了,但是我已经尝试了好几个小时,却没有任何效果,我是php和ajax的新手,所以,我可能会遗漏一个我不知道的小东西,我想要在这里实现的目的是,我希望用户选择一个食物组,然后基于该组显示配料表。 我单独测试了process.php文件,它运行良好,还测试了脚本,发生了什么事,当我注释掉并键入alert(parent)时,从$ .ajax开头的行不起作用了,我

  • 我有重复的变量声明,我认为它们可以通过for循环来改进,但是我的尝试失败了。 我尝试了数组的for-loop声明器,但我的语法不起作用。 我有一个“工作代码”: 我试图减少它是这样的: 预期结果: 与“工作代码”相同的结果: 当我单击“menu1”div时: 实际错误消息:“意外标记=”“未捕获的TypeError:菜单[0][i].AddEventListener不是函数” 编辑:我发现了一个巨

  • 问题内容: 我有这样的桌子 和包含年和月行的表 如何从的更改中选择 ? 我输入这个查询 #1064-您的SQL语法有误;检查与您的MySQL服务器版本对应的手册以获取正确的语法,以在第1行的’SELECT CONCAT(’changes’,year,month)FROM changes)’附近使用 问题答案: 您打开1 并关闭2 。删除最后一个: 编辑 第二个语句应该是 那行得通,但是不确定那是否

  • 问题内容: 我正在一个项目中,另一个开发人员创建了一个表,该表的列名为。那是两个词之间的空格。如果我使用“企业名称” 运行语句,则说没有名称为“企业”的列。 我怎么解决这个问题? 问题答案: 通常,第一步是首先不要这样做,但如果已经完成,则需要诉诸正确的列名引用: 通常,这类事情是由使用Microsoft Access之类的人创建的,并且总是使用GUI来做他们的事情。

  • 问题内容: 我想了解MySQL中的某些特定行为。运行“ select @@ version”,我看到我的版本是5.6.34-log。 让我使用生成的表放置样本,以使其更易于重现: 正如标题所建议的那样,我最初搜索的是如何通过别名选择列,以便重用计算所得的字段,从而避免了冗长的查询。如文档中所述,大多数答案要么建议使用子查询,要么使用变量- 一种可读性差,而另一种则不能由自己的数据库开发人员来保证。