我通过下面的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群集(GPL),版本rel82.2,修订版114f2f2,WSREP版本26.21,wsrep_26.21
答案 0 :(得分:0)
您已经很近了,但是docs的这一部分应该可以完整显示图片
语句名称不区分大小写。 preparable_stmt是 字符串文字或包含SQL文本的用户变量 声明。文本必须代表一个声明,而不是多个 陈述。在语句中,?字符可以用作 参数标记,用于指示将数据值绑定到哪里 稍后在执行时查询。 ?字符不应该 括在引号中,即使您打算将其绑定到 字符串值。 参数标记仅可用于数据值 应该出现,而不是用于SQL关键字,标识符等。
换句话说,您可以将诸如meterqueueid
之类的数据值用作绑定变量,但不能使用@COLUMNS
中收集的列标识符。
假设meterqueueid
也来自另一个变量,那么类似的事情应该起作用
SET @mqid = 38;
SET @sql = CONCAT('SELECT ', @COLUMNS, ' FROM ADM_METERQUEUE where meterqueueid=?');
PREPARE stmt FROM @sql;
EXECUTE stmt USING @mqid;
DEALLOCATE PREPARE stmt;