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
相关产品推荐
相关产品推荐

