要创建要在查询中使用的列名,您需要在set命令中使用用户定义的变量。语法如下-
SET @anyVariableName := ( SELECT CONCAT ( "SELECT", GROUP_CONCAT(CONCAT("\n 1 as ", COLUMN_NAME) SEPARATOR ','), "\n FROM DUAL") FROM INFORMATION_SCHEMA_COLUMNS WHERE TABLE_NAME= ‘yourTableName’ );
现在,使用PREPARE命令准备语句。语法如下-
PREPARE anyVariableName from @anyVariableName;
使用EXECUTE命令执行语句。语法如下-
EXECUTE anyVariableName;
使用DEALLOCATE命令取消分配准备好的语句。语法如下-
DEALLOCATE PREPARE anyVariableName;
现在,我们将创建一个包含两列的表,该列将在concat查询中使用。创建表的查询如下-
mysql> create table ConcatenationWithUserDefinedVariable -> ( -> Id int NOT NULL AUTO_INCREMENT, -> User_Id int, -> PRIMARY KEY(Id) -> );
将以上语法用于查询中要使用的列名。查询如下-
mysql> set @q := ( -> select concat( -> "select", -> group_concat(concat("\n 1 as ", column_name) separator ','), -> "\nfrom dual") -> from information_schema.columns -> where table_name = 'ConcatenationWithUserDefinedVariable');
准备上述用户定义变量的查询如下-
mysql> prepare stmt from @q; Statement prepared
现在执行上面准备的语句。查询如下-
mysql> execute stmt;
以下是输出-
+----+---------+ | Id | User_Id | +----+---------+ | 1 | 1 | +----+---------+ 1 row in set (0.00 sec)
最后,您需要取消分配准备好的语句。查询如下-
mysql> deallocate prepare stmt;