MySQL:多个列值作为一个逗号分隔的字符串?
假设我有一个select查询,如:MySQL:多个列值作为一个逗号分隔的字符串?,mysql,select,Mysql,Select,假设我有一个select查询,如: SELECT * FROM tablename 表中有字段1、字段2和字段3 有人知道是否有可能获得一个结果集,其中只有一行和一个字段,列的值以逗号分隔,如下所示: "fieldvalue1, fieldvalue2, fieldvalue3" 问题是我事先不知道表的列名 另一个问题是,预先准备好的语句不是解决方法,因为所有这些都应该在触发器内完成,而MySQL不允许在触发器内使用动态游标/选择 首先,要提前找到列的名称,假设您有表的名称,您可以将它们作为
SELECT * FROM tablename
表中有字段1、字段2和字段3
有人知道是否有可能获得一个结果集,其中只有一行和一个字段,列的值以逗号分隔,如下所示:
"fieldvalue1, fieldvalue2, fieldvalue3"
问题是我事先不知道表的列名
另一个问题是,预先准备好的语句不是解决方法,因为所有这些都应该在触发器内完成,而MySQL不允许在触发器内使用动态游标/选择 首先,要提前找到列的名称,假设您有表的名称,您可以将它们作为任何其他查询获取: 显示
您的_表中的列
一旦你有了名字,你可以做:
从您的_表中选择CONCAT(field1',',',field2',',field3)作为新字段
这里似乎有3个问题:
选择CONCAT_WS(',',Field1,Field2,Field3)
将返回“Field1Value,Field2Value,Field3Value”我做了一些研究,只涉及到正确连接列名的GROUP_。但问题是
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语句的列名进行计算并返回实际值
从我在所有讨论这类问题的论坛(还有很多论坛)上读到的内容来看,如果没有事先准备好的声明,真的没有办法让这项工作起作用
我只能想到另一种方法,那就是在每个表上都有一个专用列,在插入或更新时将各个列值连接在一起,这样您就可以选择这一个字段而不是整个字段集。我误解了您的问题,哎呀。我以为您希望列名以逗号分隔。这行不通,因为我不能使用prepared语句来构造select(因为您不能在触发器中使用prepared语句)。我想这是做不到的…不,这是一个问题。我知道如何使用存储过程、游标、触发器、准备好的语句以及如何从表中获取字段名。但不可能在触发器内完成所有这些。MySQL就是不允许。如果你有能力运行服务,你可以使用触发器将数据插入定期扫描的表中。根据您的需要,您可以将触发器设置为“INSERT INTO TriggeredCodeTable(csvfields,tablename)”这样简单。该服务将根据需要经常扫描该表,并创建动态sql来执行您需要的操作。不像简单的触发器那么好,但是可行