使用来自存储参数的输入参数作为 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 子句中的变量的主要内容,如果未能解决你的问题,请参考以下文章