创建名为sp_del_inactive_cust的存储过程以删除没有订单的客户。存储过程应删除1行。
这是我正在使用的数据库。 database diagram http://students.bcitwebdev.com/jlandon/school/1630/databasediagram.png
我的想法是,我需要根据订单表检查customers表。如果客户存在于customers表中但不存在于orders表中,则必须表明他们未在客户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
答案 0 :(得分:3)
CREATE PROCEDURE sp_del_inactive_cust
AS
DELETE TOP (1) c
FROM
customers c
LEFT OUTER JOIN orders o
ON C.customer_id = o.customer_id
WHERE
o.customer_id IS NULL
答案 1 :(得分:1)
您需要创建反联接以获取未下订单的客户,例如:
DELETE c FROM
FROM customers c LEFT JOIN orders o ON c.customer_id = o.customer_id
WHERE o.customer_id IS NULL
答案 2 :(得分:0)
我讨厌给你答案,所以我会给你一个反面的例子让你弄清楚其余的
这是一个例子
2张桌子 foo {foo_id,a,b,c} bar {bar_id,foo_Id,e,f,g}
如果我想删除条形码表中出现的foo中的所有记录,我会写
删除foo 其中foo_id in(从bar中选择foo_id)
查找“in”关键字以获得真实解释 如果你不按照老师想要的方式做事,也总会有很多做某事的方法,你可能无法在课堂上取得适当的成绩
答案 3 :(得分:0)
DELETE customers
WHERE customer_id NOT IN (SELECT customer_id FROM Orders)