2012-05-04 2 views
2

私はそれらの間の関係を持つテーブルを持っている - 関係の種類:1対多。sqlの乗算テーブルから行を削除するには?

DELETE Orderstbl.*, ItemsInOrdertbl.* 
FROM Orderstbl INNER JOIN ItemsInOrdertbl ON Orderstbl.OrderID = ItemsInOrdertbl.OrderId 
WHERE (((Orderstbl.OrderID)=26)); 

= 26 受注コードが含まれて両方のテーブルのすべての行を削除しますが、私の驚きに、それは次のエラーを満たし:

could not delete from specified tables 

はしようとした と私は次のクエリは、と思いましたGoogleでの回答を見つける、多くの感謝の前にD

+0

トランザクションを別のステートメントとして複数のテーブルから削除するには、トランザクションを使用します。それ以外の場合はカスケードを使用しますが、テーブル関係を混乱させる必要があります。 –

答えて

1

あなたはまたCASCADE DELETEを含む関係を作成することができます、そして、あなたが1つからそれを削除すると、他のから削除されますmicrosoftから

あなたはカスケードは、あなたが関係を定義する とき関連レコード]チェックボックスを削除]を選択した場合は、プライマリ テーブル内のレコードを削除する任意の時間は、Microsoft Accessが自動的にで関連レコードを削除します 関連テーブルたとえば、 Customersテーブルから得意先レコードを削除すると、Ordersテーブルの (これには、Ordersレコードに関連するOrder Details テーブルのレコードが含まれます)のすべての顧客の注文が自動的に削除されます。関連するレコードを削除するチェックボックス フォームまたはデータシートからレコードを削除すると、 が削除されている可能性があります。ただし、削除クエリを使用してレコードを削除すると、 Microsoft Accessは警告を表示せずに関連テーブル のレコードを自動的に削除します。

CASCADE DELETEを使用すると、両方のテーブルから正しいレコードが削除されていることを確認するためのシンプルでクリーンな方法です。

ここでは、MS-AccessでのCASCADE DELETEについて説明している別の記事です。

Delete one or more records from an Access database

+0

ありがとうございます! :D –

0

2つのテーブル内の列の間に設定する外部キーを持っている場合は、最初の子の列を削除することを確認する必要があり、その後、マスター。これを行う適切な方法は、UPDATEまたはDELETEなど、マスターの削除時に制約を設定することです。この制約は外部キーの関係を処理するので、孤立した行は決してその場に巻き込まれません。 (例えば)MySQLでは制約を作成する

...

[CONSTRAINT [symbol]] FOREIGN KEY 
    [index_name] (index_col_name, ...) 
    REFERENCES tbl_name (index_col_name,...) 
    [ON DELETE reference_option] 
    [ON UPDATE reference_option] 

他のオプションは、最初の子テーブルの行を削除、プログラムでそれを行う、その後、マスターすることです。

関連する問題