SELECT INTO with LIMIT

时间:2015-03-31 15:50:52

标签: mysql

如果我有一个如此定义的表:mytable(model char(4), price int);并且我试图在给定基本价格的情况下找到最接近价格的值,我该怎么做呢?

我拥有的是:

delimiter //
CREATE FUNCTION findClosestPrice (value int) returns int
BEGIN
    DECLARE closestPrice int default -1;
    DECLARE row int default 0;
    DECLARE rows int default 0;
    DECLARE currPrice int default -1;
    select count(*) from mytable into rows;
    SET row=0;
    WHILE row < rows DO
        select price from mytable limit row, 1 into currPrice; <----- this gives an error
        SET row = row + 1;
    END WHILE;
END//

为什么我不能拥有那条线? 如何从循环中的当前行中选择价格并将其保存到我声明的变量中?我认为这样可行,但事实并非如此。

2 个答案:

答案 0 :(得分:1)

您可以使用单个查询找到与基本价格最接近的价格:

SELECT model,price,(ABS(price-basePrice)) AS price_diff FROM mytable ORDER BY price_diff LIMIT 1

答案 1 :(得分:0)

into必须遵循from之前的列名称。

更改

select price from mytable limit row, 1 into currPrice;

select price into currPrice from mytable limit row, 1;

请参阅

  

SELECT Syntax
  ... INTO子句可以如图所示出现   语法描述或紧跟在 select_expr 列表之后   ...