错误1172-结果在MySQL中包含多于一行

问题描述 投票:0回答:2

我正在尝试创建一个功能,用于检查书表中是否存在书的钥匙,如果存在,它将确定库存表中该书的数量以及从书本中已售出的书数。购买项目表。当我尝试运行当前代码时,无论值如何,每次运行时都会显示“结果包含多行”。我不清楚如何进行其他调整。

DELIMITER //

CREATE FUNCTION quantity_on_stock(
    book_key INT
)
RETURNS INT
READS SQL DATA
BEGIN
    DECLARE num_books_recieved INT;
    DECLARE num_books_sold INT;
    DECLARE book_key_var INT;
    DECLARE book_inventory_key_var INT;

    SELECT book_key
    INTO book_key_var
    FROM books
    WHERE book_key = books.book_key;

    IF book_key = book_key_var THEN
        SELECT quantity INTO num_books_recieved FROM book_inventory bi WHERE book_key = bi.book_key;
        SELECT book_inventory_key INTO book_inventory_key_var FROM book_inventory bi WHERE book_key = bi.book_key;
        SELECT quantity INTO num_books_sold FROM purchase_items pi WHERE book_inventory_key_var = pi.book_inventory_key;
    END IF;

    RETURN (num_books_recieved - num_books_sold);
END//

DELIMITER ;

Book_key是书籍清单表中的FK。 Book_inventory_key是purchase_items表中的FK。

mysql sql stored-functions
2个回答
0
投票

向查询添加LIMIT 1:

SELECT book_key
INTO book_key_var
FROM books
WHERE book_key = books.book_key
LIMIT 1;

0
投票

此逻辑:

  SELECT quantity INTO num_books_recieved 
  FROM book_inventory bi
  WHERE book_key = bi.book_key;

不做您想的。第一个book_key也引用列-列在变量之前匹配。

所以,实际上是:

  SELECT quantity INTO num_books_recieved 
  FROM book_inventory bi
  WHERE bi.book_key = bi.book_key;

我建议将变量重命名为与列名称不冲突的名称。

© www.soinside.com 2019 - 2024. All rights reserved.