使用此站点的数据:https://www.sqlservertutorial.net/sql-server-sample-database/
我收到提示
创建一个名为findStoreByProduct((的存储函数,该函数将字符串作为输入,并返回store_id。store_id与具有最大储存输入字符串中标识的产品。
有人能首先详细说明存储函数和存储过程之间的区别吗?我还是有点不知所措。我已经浏览了其他关于同一问题的stackoverflow帖子,但仍然是一片空白。
那么有人能帮助我了解如何/从哪里开始吗?我的第一个想法是使用子查询链接这三个表(产品、订单项和订单(,但显然它应该比这更基本。
@Imran Faruqi
我以为我已经在你的帮助下解决了这个问题,但我认为我的代码有问题,因为尽管我使用了select语句,但我仍然得到了相同的输出。
DELIMITER //
CREATE function findStoreByProduct (product_name VARCHAR(300))
RETURNS INT DETERMINISTIC
BEGIN
DECLARE storeID INT;
DECLARE storeQuantity INT;
SELECT s.store_id from stocks as s
INNER JOIN
products AS p
ON s.product_id = p.product_id
ORDER BY p.product_id DESC
LIMIT 1
INTO storeID;
RETURN(storeID);
END //
SELECT findStoreByProduct("Trek XM700+ - 2018");
不管我在函数中投入了什么,我总是得到相同的结果"1"。有什么想法吗?
此SO Post定义了存储过程与函数。
那么有人能帮助我了解如何/从哪里开始吗?
首先,您需要创建一个标量函数,该函数只返回一个值,即整数值。
-
通过产品名称(在功能参数中提供(查找
product_id
。 -
找到数量最多的商店,然后是上面获得的
product_id
。您可以使用聚合函数来实现这一点(此处将使用MAX(((。确保按product_id
分组
另一种策略:
您可以在这两个表之间进行连接,使用WHERE子句来匹配产品名称(在函数参数中提供(,也可以使用上面建议的聚合函数和GROUP BY子句。