我正在尝试创建一个功能,用于检查书表中是否存在书的钥匙,如果存在,它将确定库存表中该书的数量以及从书本中已售出的书数。购买项目表。当我尝试运行当前代码时,无论值如何,每次运行时都会显示“结果包含多行”。我不清楚如何进行其他调整。
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。
向查询添加LIMIT 1:
SELECT book_key
INTO book_key_var
FROM books
WHERE book_key = books.book_key
LIMIT 1;
此逻辑:
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;
我建议将变量重命名为与列名称不冲突的名称。