创建存储过程以删除没有值的行

时间:2012-12-06 20:34:46

标签: sql select stored-procedures inner-join procedure

创建名为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

4 个答案:

答案 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)