2016-09-22 13 views
0

が存在する参照IDを見つけますこのスクリプトは、顧客が削除されても顧客のお問い合わせがまだ存在するかどうかを確認します。SQLは、もはや私はこれらのテーブルを持っている

SELECT 
    p.CustomerID 
FROM 
    tblCustomerInqry p 
LEFT JOIN 
    tblCustomer v ON v.CustomerID = p.CustomerID 
WHERE 
    v.CustomerID IS NULL 
    AND p.CustomerID IS NOT NULL 

このクエリを実行した後に、存在しないお客様のお問い合わせをtblCustomerInqryから削除する必要があります。また、お客様のお問い合わせには、表tblSpecificConsiderationCustInqryIDの参照もありますが、これも削除する必要があります。

ありがとうございました。

+1

ご使用のデータベースに質問にタグを付けてください。 –

答えて

0

まず、外部キーを使用してこれを行う必要があります。外部キーを定義するときに、カスケード制約を定義できます。これらは、値が削除されたときの処理を指定します。また、参照レコードを自動的に削除することもできます。

として削除を行うことができます:あなたは、特定の考慮前に問い合わせを削除するので、この順に削除を行う必要があり

delete from tblCustomerInqry 
    where not exists (select 1 
         from tblCustomer c 
         where c.CustomerID = tblCustomerInqry.CustomerID 
        ); 

delete from tblSpecificConsideration 
    where not exists (select 1 
         from tblCustomerInqry ci 
         where ci.CustInqryID = tblSpecificConsideration.CustInqryID 
        ); 

ただし、カスケード削除を使用してデータベースに作業をさせるのが最善の方法です。

+0

ご返信ありがとうございます。しかし、2つのエラーを取得しています。 'ci'の近くに不正な構文があり、 'sc'の近くに構文が正しくありません。 @Fresher。 –

+0

。 。競合する 'FROM'節が2つあるため、SQL ServerのDELETEステートメントではテーブルの別名が奇妙です。だから、私はエイリアスを削除しました。 –

+0

次のエラーが発生しました: DELETE文がREFERENCE制約 "FK_tblSpecificConsideration_tblCustomerInqry"と競合しました。競合はデータベース "DATABASE"、テーブル "tblSpecificConsideration"、列 'CustInqryID'で発生しました。 ステートメントが終了しました。 (0行が該当) –

関連する問題