MySQL:多个列值为1个逗号分隔的字符串?

时间:2011-01-03 22:59:57

标签: mysql select

假设我有一个选择查询,如:

SELECT * FROM tablename

并且在表中是列:field1,field2和field3

有没有人知道是否可以获得只有1行1字段的结果集,并使用逗号分隔的列值,如下所示:

"fieldvalue1, fieldvalue2, fieldvalue3"

问题是我事先不知道表的列名......

另一个问题是准备好的语句不是可行的方法,因为所有这些都应该在触发器内完成,并且MySQL不允许在触发器内部使用动态游标/选择。

3 个答案:

答案 0 :(得分:6)

我做了一些研究,但只有GROUP_CONCAT使列名正确。但问题是,那个

SELECT (SELECT GROUP_CONCAT( cols.column_name) FROM (SELECT column_name FROM information_schema.columns WHERE table_name='test_table') as cols) FROM test_table

将返回一个包含列名的连续字符串,每个表行一次,而不是将其作为外部select语句的列名进行评估并返回实际值。

根据我在讨论这类问题的所有论坛中所读到的内容(并且有很多内容),如果没有准备好的陈述,实际上没有办法让它工作。

我只能想到另一种方法,那就是在每个表上都有一个专用列,你可以在INSERT或UPDATE上连接各个列值,这样你就可以简单地选择这一个字段而不是全套领域。

答案 1 :(得分:1)

首先,要提前找出列的名称,假设您有表的名称,您可以像任何其他查询一样获取它们:

  

显示来自your_table

的列

获得姓名后即可:

  

SELECT CONCAT(field1,',',field2,',',field3)AS newField FROM your_table

答案 2 :(得分:1)

好像你在这里有3个问题:

  1. 获取1行,1字段的结果集:MYSQL有一个CONCAT_WS函数,其工作方式如下: SELECT CONCAT_WS(',',Field1,Field2,Field3) 那将返回“Field1Value,Field2Value,Field3Value”

  2. 我不确定你将如何得到这些列名。你需要从sql语句,字符串等中获取它们吗?您可以获取表名称`SHOW COLUMNS FROM tablename'。 Field 列将包含列名称。

  3. mysql中提供了触发器(我认为在5.0.2中添加):http://dev.mysql.com/doc/refman/5.0/en/triggers.html