MySQL concat()创建要在查询中使用的列名?

时间:2009-06-12 09:35:32

标签: mysql concat

我希望以列名的第一部分是字符串的方式连接列名,第二部分是另一个查询的结果的数字。

例如:

SELECT CONCAT('column', mytable.mycolumn) FROM table ...

这可以通过某种方式完成。这样它不会给我错误,但我没有得到预期的结果,似乎连接不起作用。

5 个答案:

答案 0 :(得分:23)

我之前曾说过这不可能,但我错了。我最终需要这样的东西,所以我环顾四周,发现server-side prepared statements允许你从字符串构建和执行任意SQL语句。

以下是我为证明这一概念所做的一个例子:

set @query := (
  select concat(
    "select",
      group_concat(concat("\n  1 as ", column_name) separator ','),
    "\nfrom dual")
  from information_schema.columns
  where table_name = 'columns')
;
prepare s1 from @query
;
execute s1
;
deallocate prepare s1
;

答案 1 :(得分:12)

如果列数是固定的,那么非动态方法可以是:

select 
  case mytable.mycolumn
    when 1 then column1  -- or: when 'a' then columna
    when 2 then column2
    when ...
    else ...
  end as my_semi_dynamic_column
from ...

答案 2 :(得分:3)

我认为您无法使用CONCAT()CONCAT_WS()执行此操作。我建议使用你正在使用的langauge创建字段名称。这样做会非常可怕,具体取决于数据库中的数据来自何处。

答案 3 :(得分:0)

我建议查看information_schema。以下代码未经测试,但理论上应该可行。显然用适当的表名替换你的表名或链接到information_schema.tables并在where子句中使用table_type

select concat('column', column_name) from information_schema.columns where table_name ='your table name'

答案 4 :(得分:-1)

您可以轻松使用以下查询:

SELECT group_concat( COLUMN_NAME) FROM information_schema.columns WHERE table_name ='your table name';