【发布时间】:2012-11-24 23:31:23
【问题描述】:
创建一个名为 sp_del_inactive_cust 的存储过程来删除没有订单的客户。存储过程应删除 1 行。
这是我正在使用的数据库。
(来源:bcitwebdev.com)
我的直接想法是我需要对照订单表检查客户表。如果客户出现在客户表中但不在订单表中,这一定意味着他们没有在其客户 ID 下创建任何订单 ID。然后,如果客户没有任何订单,我必须删除他们。
我不确定如何编写这个问题的脚本。我需要帮助!请保持简单,因为我是第一学期的学生。
这是我尝试过的开始:
CREATE PROCEDURE sp_del_inactive_cust
AS
SELECT customers.customer_id,
orders.customer_id
FROM customers
INNER JOIN orders ON customers.customer_id=orders.customer_id
WHERE /* customer_id is found in customers table but not in orders table */
然后我将执行该过程。
感谢 Michael Fredrickson 的帮助,此问题已得到解答。
以下是删除所需 1 行的最终语句:
CREATE PROCEDURE sp_del_inactive_cust
AS
DELETE customers
FROM customers
LEFT OUTER JOIN orders ON customers.customer_id = orders.customer_id
WHERE orders.customer_id IS NULL;
GO
EXECUTE sp_del_inactive_cust;
GO
【问题讨论】:
-
您不能为此创建触发器,因为您将在客户表中输入的每条记录在输入时都没有订单。您可以在每小时运行的工作中执行此操作。
-
好的,如果不是触发器,我还能如何运行这个程序?我还没有学习如何运行工作。
-
哦,永远不要命名存储过程 sp_ - 系统过程使用它。
-
并且存储过程绝对不应该删除一行。如果一次添加多行,这将导致表永远不会是最新的。如果你的老师让你做这种愚蠢的事情,他或她显然是不称职的。您希望在数据库中成组地处理事情,而不要一次只考虑一行。
-
好吧...我会这样命名,因为这是我学校的要求。
标签: sql select stored-procedures inner-join procedure