mysql - 在where子句中使用mysql函数时,MYSQL结果包含多行
问题描述
我有一个计算产品价格的存储过程(函数)。
这是我的功能:
CREATE DEFINER=`root`@`localhost` FUNCTION `getWinnerPriceByProductId`(
`p_product_id` INT
)
RETURNS float
LANGUAGE SQL
NOT DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT ''
BEGIN
DECLARE v_winner_price FLOAT DEFAULT 0;
DECLARE v_product_plan VARCHAR(255);
SELECT ps.plan INTO v_product_plan FROM product_supplier ps WHERE ps.product_id = p_product_id AND ps.winner = 1;
IF v_product_plan = 'Plan AB' THEN
SELECT ps.wholesale_price INTO v_winner_price FROM product_supplier ps WHERE ps.product_id = p_product_id AND ps.winner = 1 LIMIT 1;
ELSE
SELECT ps.price INTO v_winner_price FROM product_supplier ps WHERE ps.product_id = p_product_id AND ps.winner = 1 LIMIT 1;
END IF;
RETURN v_winner_price;
END
现在当我简单地调用这个函数时:
Select getWinnerPriceByProductId(1);
然后它返回正确的结果。
但是当我尝试在 where 子句中使用它时,例如:
SELECT * FROM products p where getWinnerPriceByProductId(p.id) BETWEEN 1 AND 100;
然后我收到一条错误消息:
结果包含多行。
如果结果由多行组成,那么调用函数时的情况与第一种情况不同吗?为什么只有当我在某些查询中使用该函数时才会发生这种情况?我在这里做错了什么?
解决方案
SELECT * FROM products where getWinnerPriceByProductId(p.id) BETWEEN 1 AND 100;
p.id是什么我们没有为此创建别名?您能否确保此 SP 在 1 列 getWinnerPriceByProductId(p.id) 上返回。
推荐阅读
- javascript - 最多等待 N 秒以等待某事发生
- kubernetes - 使用 Kubernetes 容器原生负载均衡和 GCP Standalone NEG 实现网络负载均衡
- python-3.x - 在 python 中使用 selenium 查找特定标签
- javascript - 如何在 JavaScript 中扩展 HTML 元素列表?
- terraform - 使用 for_each 填写列表参数
- mysql - mysql的'where子句'bash脚本中的未知列
- python - PermissionError:[Errno 13] 权限被拒绝(python)
- javascript - 如何创建函数 getTotalAmount
- forms - xyz表格;在第一列上使用 [halfWidth] 时如何释放“行”的第二个“列”
- css - “溢出:自动”不会阻止宽 div 破坏表格布局