sql >> データベース >  >> RDS >> Sqlserver

ないレコードを削除する方法

    仮定から始めたいと思います。

    1. チェーンのようなデータモデルがあります:Projects-*ProjectSchemes-*スキーム
    2. ターゲットは有効なチェーンのみを持つことであるため、ProjectなしのProjectSchemes、ProjectSchemesなしのSchemesはありません。
    3. NULLはいずれかのIDの有効な値ではありません。
    4. すべてのIDはテーブル内で一意です
    5. データベースの参照整合性メカニズムを使用しない

    その結果、SELECTはSchemesテーブル内のすべてのSchemesのscheme_idを一覧表示します。

    そうは言っても、対応するプロジェクトなしですべてのProjectSchemesの削除を開始する必要があります。これらは、IDがNULLまたはプロジェクトテーブルに存在しないIDを持つProjectSchemesです:

    DELETE ProjectSchemes WHERE (Project_Id is NULL) OR 
    (NOT EXISTS (SELECT * FROM Projects WHERE
                 Projects.Project_Id = ProjectSchemes.Project_Id))
    

    プロジェクトなしでProjectsSchemesを削除した後、Schemesテーブルにいくつかの新しい孤立が存在する可能性があります。次に、IDがNULLであるか、ProjectsSchemesテーブルに存在しないIDを持つすべてのスキームを削除します。

    DELETE Schemes WHERE (Scheme_Id is NULL) OR 
    (NOT EXISTS (SELECT * FROM ProjectSchemes WHERE
                 ProjectSchemes.Scheme_Id = Schemes.Scheme_Id))
    

    ProjectSchemesを削除しないと、プロジェクトに接続されていないスキームが存在する可能性があります。



    1. ローカルのOracleインスタンスで開発する

    2. MariaDBで日付に年を追加する6つの方法

    3. 無効な日時形式:1292不正な日時値-Laravel 5.2

    4. netbeansプロジェクトを使用してphpからmysqlに接続できません