You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL Workbench报1222错误:SELECT语句列数不匹配求助

解决MySQL ERROR 1222: SELECT语句列数不匹配问题

你的错误原因很直接:SELECT子句返回的列数和INTO子句指定的变量数量不匹配。

看这段出问题的代码:

SELECT product_name, list_price, discount_percent INTO itemPrice, discount
FROM products
WHERE product_id = itemId;

你SELECT了3列(product_name、list_price、discount_percent),但只声明了2个变量(itemPrice、discount)来接收结果,MySQL无法完成列与变量的对应匹配,所以抛出ERROR 1222。

修正方案

计算折扣价根本不需要product_name字段,直接去掉这一列,让SELECT返回的列数和变量数保持一致即可:

DELIMITER //

CREATE FUNCTION discount_price(itemId INT) RETURNS DECIMAL(10,2)
READS SQL DATA
DETERMINISTIC
BEGIN
 DECLARE itemPrice DECIMAL(10,2);
 DECLARE discount DECIMAL(10,2);

 -- 移除不需要的product_name,列数与变量数匹配
 SELECT list_price, discount_percent INTO itemPrice, discount
 FROM products
 WHERE product_id = itemId;

 RETURN itemPrice - (itemPrice * discount);
END //

DELIMITER ;

额外注意

如果你的discount_percent字段存储的是百分比数值(比如用10代表10%),那当前的计算逻辑会出错——itemPrice * discount会算出原价的10倍,而不是原价的10%。这种情况下需要调整计算式:

RETURN itemPrice - (itemPrice * discount / 100);

或者更简洁的写法:

RETURN itemPrice * (1 - discount / 100);

具体要根据products表中discount_percent的实际取值规则来调整。

内容的提问来源于stack exchange,提问作者Riki

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 00:52:08