我通过下面的select查询输出分配一个变量。
select group_concat(COLUMN_NAME)
from
( select distinct COLUMN_NAME
FROM information_schema.`COLUMNS` C
WHERE table_name = 'ADM_METERQUEUE'
AND COLUMN_NAME LIKE '%maxrate%'
order
by 1 desc
limit 5) as ids
INTO @COLUMNS
赋值变量的输出如下。
select @COLUMNS
o/p::maxrate23、maxrate22、maxrate21、maxrate20、maxrate19
当我在select子句中使用时,我得到如下结果。
select @COLUMNS from ADM_METERQUEUE where meterqueueid=38
o/p::maxrate23、maxrate22、maxrate21、maxrate20、maxrate19
我想达到如下的效果,请告诉我怎么做。
期望输出:
select maxrate23,maxrate22,maxrate21,maxrate20,maxrate19 from ADM_METERQUEUE where meterqueueid=38;
+-----------+-----------+-----------+-----------+-----------+
| maxrate23 | maxrate22 | maxrate21 | maxrate20 | maxrate19 |
+-----------+-----------+-----------+-----------+-----------+
| 2 | 7 | 4 | 4 | 1 |
+-----------+-----------+-----------+-----------+-----------+
select group_concat(COLUMN_NAME) from ( select distinct COLUMN_NAME FROM information_schema.`COLUMNS` C WHERE table_name = 'ADM_METERQUEUE' AND COLUMN_NAME LIKE '%maxrate%' order by 1 desc limit 5) as ids INTO @COLUMNS;
PREPARE stmt FROM 'select ? from ADM_METERQUEUE';
EXECUTE stmt USING @COLUMNS;
o/p::maxrate23、maxrate22、maxrate21、maxrate20、maxrate19
不过,我得到的列名与输出服务器版本相同:5.6.37-82.2-56-log percona xtradb cluster(gpl),rel82.2版本,114f2f2版本,wsrep版本26.21,wsrep_.21
1条答案
按热度按时间ktca8awb1#
你很快就到了,但是文档中的这一部分应该可以完成这幅图
语句名称不区分大小写。preparable\u stmt是字符串文字或包含sql语句文本的用户变量。文本必须表示单个语句,而不是多个语句。在声明中?字符可以用作参数标记,以指示稍后执行查询时数据值绑定到查询的位置。这个?即使要将字符绑定到字符串值,也不应将字符括在引号内。参数标记只能在数据值应该出现的地方使用,不能用于sql关键字、标识符等。
换句话说,可以使用数据值,例如
meterqueueid
作为绑定变量,但不是中收集的列标识符@COLUMNS
.假设
meterqueueid
也来自另一个变量,那么类似的东西应该会起作用