2

sp_del_inactive_custというストアドプロシージャを作成して、注文のない顧客を削除します。ストアドプロシージャは1行を削除する必要があります。

これが私が使用しているデータベースです。 (ソース:bcitwebdev.comデータベース図

私の当面の考えは、顧客テーブルを注文テーブルと照合する必要があるということです。顧客が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 */

そして、手順を実行します。

この質問は、マイケル・フレドリクソンの助けを借りて答えられました。

必要な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

4 に答える 4

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
于 2012-12-06T20:37:19.387 に答える
2

次のように、注文を行っていない顧客を獲得するために、アンチジョインを作成する必要があります。

DELETE c FROM
FROM customers c LEFT JOIN orders o ON c.customer_id = o.customer_id
WHERE o.customer_id IS NULL
于 2012-12-06T20:38:05.970 に答える
0

私はあなたに答えを与えるのが嫌いなので、私はあなたに逆の例を与え、あなたに残りを理解させます

ここに例があります

2つのテーブルfoo{foo_id、a、b、c} bar {bar_id、foo_Id、e、f、g}

バーテーブルに表示されるfooからすべてのレコードを削除したい場合は、次のように記述します。

foo_idを削除します(バーからfoo_idを選択します)

実際の説明については、「in」キーワードを調べてください。また、何かを行う方法は常にたくさんあり、教師が望む方法で物事を行わないと、クラスで適切な成績が得られない可能性があります。

于 2012-12-06T20:44:30.153 に答える
0
DELETE customers 
WHERE customer_id NOT IN (SELECT customer_id FROM Orders)
于 2012-12-06T21:02:28.923 に答える