MYSQL 在 where 子句中使用 mysql 函数时,结果多于一行

MYSQL Result consisted more than one row when using mysql function in where clause

我有一个计算产品价格的存储过程(函数)。

这是我的职能:

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);

那么它 returns 正确的结果。

但是当我尝试在 where 子句中使用它时,例如:

SELECT * FROM products p where getWinnerPriceByProductId(p.id) BETWEEN 1 AND 100;

然后我收到一条错误消息:

The Result Consisted more than one rows.

如果结果由多行组成,那么调用函数时的情况与第一种情况不一样吗?为什么只有当我在某些查询中使用该函数时才会发生这种情况?我在这里做错了什么?

SELECT * FROM products where getWinnerPriceByProductId(p.id) BETWEEN 1 AND 100;

什么是 p.id 我们没有为此创建别名?你能确保这个 SP return 在 1 列 getWinnerPriceByProductId(p.id).

目前没有创建函数的需求。一旦 OP 提供更多信息,将编辑此答案。

-- function can be replaced into simple join query
select case when ps.plan='Plan AB' then ps.wholesale_price else ps.price end as 'winner_price' 
from product_supplier ps
join product p on ps.product_id=p.id
where ps.winner=1 
and p.id=1; -- this is what you are parsing into the function