mysql变量值作为select子句中的列

atmip9wb  于 2021-06-17  发布在  Mysql
关注(0)|答案(1)|浏览(346)

我通过下面的select查询输出分配一个变量。

  1. select group_concat(COLUMN_NAME)
  2. from
  3. ( select distinct COLUMN_NAME
  4. FROM information_schema.`COLUMNS` C
  5. WHERE table_name = 'ADM_METERQUEUE'
  6. AND COLUMN_NAME LIKE '%maxrate%'
  7. order
  8. by 1 desc
  9. limit 5) as ids
  10. INTO @COLUMNS

赋值变量的输出如下。

  1. select @COLUMNS

o/p::maxrate23、maxrate22、maxrate21、maxrate20、maxrate19
当我在select子句中使用时,我得到如下结果。

  1. select @COLUMNS from ADM_METERQUEUE where meterqueueid=38

o/p::maxrate23、maxrate22、maxrate21、maxrate20、maxrate19
我想达到如下的效果,请告诉我怎么做。
期望输出:

  1. select maxrate23,maxrate22,maxrate21,maxrate20,maxrate19 from ADM_METERQUEUE where meterqueueid=38;
  2. +-----------+-----------+-----------+-----------+-----------+
  3. | maxrate23 | maxrate22 | maxrate21 | maxrate20 | maxrate19 |
  4. +-----------+-----------+-----------+-----------+-----------+
  5. | 2 | 7 | 4 | 4 | 1 |
  6. +-----------+-----------+-----------+-----------+-----------+
  7. 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;
  8. PREPARE stmt FROM 'select ? from ADM_METERQUEUE';
  9. 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

ktca8awb

ktca8awb1#

你很快就到了,但是文档中的这一部分应该可以完成这幅图
语句名称不区分大小写。preparable\u stmt是字符串文字或包含sql语句文本的用户变量。文本必须表示单个语句,而不是多个语句。在声明中?字符可以用作参数标记,以指示稍后执行查询时数据值绑定到查询的位置。这个?即使要将字符绑定到字符串值,也不应将字符括在引号内。参数标记只能在数据值应该出现的地方使用,不能用于sql关键字、标识符等。
换句话说,可以使用数据值,例如 meterqueueid 作为绑定变量,但不是中收集的列标识符 @COLUMNS .
假设 meterqueueid 也来自另一个变量,那么类似的东西应该会起作用

  1. SET @mqid = 38;
  2. SET @sql = CONCAT('SELECT ', @COLUMNS, ' FROM ADM_METERQUEUE where meterqueueid=?');
  3. PREPARE stmt FROM @sql;
  4. EXECUTE stmt USING @mqid;
  5. DEALLOCATE PREPARE stmt;

相关问题