使用来自存储参数的输入参数作为 MySQL where 子句中的变量

Posted

技术标签:

【中文标题】使用来自存储参数的输入参数作为 MySQL where 子句中的变量【英文标题】:Using the input parameters from stored parameters as variables inside where clause MySQL 【发布时间】:2021-08-30 07:19:05 【问题描述】:

我有一个简单的mysql表:

CREATE TABLE  `cont` (
  `ID` int(11) NOT NULL,
  `Meeting_id` int(11) DEFAULT NULL,
  `member_name` varchar(20) NOT NULL,
  `cont_prod` varchar(20) NOT NULL,
  `start_date` date NOT NULL,
  `type_of` varchar(100),
  `ord_qty` int(11) DEFAULT NULL
) ;

我正在尝试按照此示例 enter link description here 将行动态转置为列

    SELECT STATEMENT 中,当我在 WHERE 子句中使用输入参数时,它给了我未找到的错误列。

    我试图将变量声明为:

    SET @v1 = c_prod; SET @v2 = s_date;

在 where 子句中:

WHERE cont_prod = @v1 AND start_date = @v2

还是不行

如何在 WHERE 子句中定义输入参数变量?

任何帮助都将受到高度赞赏。

 BEGIN
         SET @sql = NULL;
    SELECT
      GROUP_CONCAT(DISTINCT
        CONCAT(
          'max(case when type_of = '',
          type_of,
          '' then ord_qty end) ',
          type_of
        )
      ) INTO @sql
    FROM
      cont
      where cont_prod = c_prod AND start_date = s_date;
    SET @sql = CONCAT('SELECT product_id,member_name,start_date,cont_prod, ', @sql, ' 
                      FROM cont WHERE cont_prod = c_prod AND start_date = s_date
                       GROUP BY member_name,cont_prod,start_date');
    
    PREPARE stmt FROM @sql;
    EXECUTE st......

【问题讨论】:

'' 应该是''' 【参考方案1】:

使用?在prepared statement中指定参数,并在EXECUTE这一行传递参数。

SET @sql = CONCAT('SELECT product_id,member_name,start_date,cont_prod, ', @sql, ' 
            FROM cont WHERE cont_prod = ? AND start_date = ?
            GROUP BY member_name,cont_prod,start_date');
PREPARE stmt FROM @sql;
EXECUTE stmt USING c_prod, s_date;

【讨论】:

谢谢。感谢你的帮助!!它在 Excute stmt 行上给出了错误。 Si 必须声明变量并使用它们:EXECUTE stmt USING '@v1', '@v2';

以上是关于使用来自存储参数的输入参数作为 MySQL where 子句中的变量的主要内容,如果未能解决你的问题,请参考以下文章

mysql存储过程一个参数有多个逗号分割

MySQL

[mysql-connector-python在将表作为参数传递时,在表名周围添加单引号。表名来自Flask会话变量

SQL Server存储过程中使用表值作为输入参数示例

MySQL---存储过程复习

mysql存储过程把字段作为传入参数