我正在创建一个过程,该过程将返回用户输入的两个日期之间的总销售额。我认为这是草率的代码,但是我无法使其运行,并且已经对其进行了多次更改。我担心我离答案越来越远而不是越来越近。这是我的代码:
DELIMITER //
CREATE PROCEDURE salesBetween (IN date1(date), date2(date),
OUT totalsale(decimal(10,2)))
BEGIN
SELECT SUM(hslineitem.numOrdered * hslineitem.price)
FROM hslineitem, hsorders
WHERE hsorders.orderId = hslineitem.orderId
AND (hsorders.orderDate BETWEEN date1 AND date2)
AND orderdate = date1, date2;
END //
DELIMITER ;
这是我第一次尝试使用多个用户输入,因此我猜我的问题与这有关。我在网上可以找到的大多数内容都不是特定于mysql的,因此它并没有太大帮助。
答案 0 :(得分:2)
请不要使用基于旧逗号的隐式联接,而不要使用现代Explicit Join
based syntax
此外,我看不到AND orderdate = date1, date2;
的目的,并且从语法上讲也是错误的。我已将其删除。
DELIMITER //
CREATE PROCEDURE salesBetween (IN date1 date, /* no brackets needed around datatype */
IN date2 date, /* specify IN for this parameter */
OUT totalsale decimal(10,2))
BEGIN
SELECT SUM(hslineitem.numOrdered * hslineitem.price) INTO totalsale
FROM hslineitem /* Changed to JOIN .. ON syntax */
JOIN hsorders ON hsorders.orderId = hslineitem.orderId
WHERE (hsorders.orderDate BETWEEN date1 AND date2);
END //
DELIMITER ;