2010-11-23 3 views
1

私はMySQLのnoobのビットですので、私と一緒にご負担ください、私はParent Tableに何かを保持する方法を見つけようとしています少なくとも1つの子テーブルは、それに結びついている。うまくいけば例が理にかなっています。しかし、親テーブルは、常にすべての段階を通して同じである、 MySQLは子テーブルが接続されていない限りデータを保持します

      Parent Table 
         ------------ 
         theId int 
         someValue varchar(20) 
        /  |   \ 
        /  |    \ 
        /  |    \ 
Open Table  / Completed Table  \ Monitoring Table 
------------------/ ------------------  ------------------ 
childTableId int   childTableId int  childTableId int 
someOtherData blob  someOtherData blob  someOtherData blob 
theId int (fk)   theId int (fk)   theId int(fk) 

は私が3件のデータのすべての異なるものを追跡しており、これらのレコードは、一定の時間のためにのみ存在しています。親テーブルを参照する唯一の子テーブルの場合、子データを削除できないようにする方法が必要です(時には2つあります)。

ヘルプ?

+0

親テーブルにカウンタを保持し、子行を追加および削除するときにカウンタをインクリメントしますか? TBH私はあなたの質問を理解していません:P –

答えて

1

イベント(オープン、完了、監視)、あなたはこれらのいずれかを呼び出すことでしょうによっては:同じtheIdは別のテーブルで発見された場合にのみ、レコードを削除します

DELETE FROM Open 
WHERE theId = 'yourId' 
AND theId IN 
    (SELECT theId FROM Completed) UNION ALL 
    (SELECT theId FROM Monitoring); 

DELETE FROM Completed 
WHERE theId = 'yourId' 
AND theId IN 
    (SELECT theId FROM Open) UNION ALL 
    (SELECT theId FROM Monitoring); 

DELETE FROM Monitoring 
WHERE theId = 'yourId' 
AND theId IN 
    (SELECT theId FROM Open) UNION ALL 
    (SELECT theId FROM Completed); 

。これをトランザクション内で実行する必要があります。それ以外の場合は、複数のユーザーが同一のtheIdのレコードを異なるテーブルで同時に削除している可能性があります。

+0

私はすべての行ではなく、選択行を削除するように 'WHERE theId = 1'または何かを追加するためにselect文を変更する必要がありますか? –

+0

ちょうど 'AND theID = whatever'を追加してください – stillstanding

+0

私にそれを説明するための素晴らしい感謝:) –

関連する問題