假设我有一个选择查询,如:
SELECT * FROM tablename
并且在表中是列:field1,field2和field3
有没有人知道是否可以获得只有1行1字段的结果集,并使用逗号分隔的列值,如下所示:
"fieldvalue1, fieldvalue2, fieldvalue3"
问题是我事先不知道表的列名......
另一个问题是准备好的语句不是可行的方法,因为所有这些都应该在触发器内完成,并且MySQL不允许在触发器内部使用动态游标/选择。
答案 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字段的结果集:MYSQL有一个CONCAT_WS函数,其工作方式如下:
SELECT CONCAT_WS(',',Field1,Field2,Field3)
那将返回“Field1Value,Field2Value,Field3Value”
我不确定你将如何得到这些列名。你需要从sql语句,字符串等中获取它们吗?您可以获取表名称`SHOW COLUMNS FROM tablename'。 Field 列将包含列名称。
mysql中提供了触发器(我认为在5.0.2中添加):http://dev.mysql.com/doc/refman/5.0/en/triggers.html