2011-01-26 29 views
2

次のデータを使用して、両方のテーブルから一致するレコードを削除しようとしています。Access 2007の複数のテーブルからレコードを削除

フルーツ

ID値
1アップル
2梨
3バナナ
4ブドウ

動物

ID値
1ベア
2モンキー
3のAp ple
4豚

これらの2つのテーブルの間には明確な関係はありません。

"Apple"が両方のテーブルに表示されているので、私はこのレコードをそれぞれから削除したいと思います。

私はこれを達成するために、次のクエリを試してみた:私は間違って

Could not delete from specified tables.

何をやっているし、何:私はこれを実行すると

DELETE DISTINCTROW Animals.*, Fruits.* 
FROM Animals INNER JOIN Fruits ON Animals.Value = Fruits.Value; 

は、しかし、私は次のエラーを受け取りますこれを修正することはできますか?

答えて

4

カスケード削除を利用するための関係を確立することなく、あなたは不運です。 DELETEステートメントは、一度に1つのテーブルで機能します(カスケード削除がある場合は、その背後で実行されます)。あなたが望むものを達成するために何かを工夫する以外に選択肢はありません。おそらく、マクロを経て、1は、このような単純な何かを行うことができます:洗練されたVBAマクロ(おそらく一時テーブル)を作る

UPDATE Animals, Fruits SET Animals.Value="DELETED", Fruits.Value="DELETED" WHERE Animals.Value=Fruits.Value 
DELETE Animals WHERE Animals.Value="DELETED" 
DELETE Fruits WHERE Fruits.Value="DELETED" 

ショート、これはそれを取得と同じくらい良いです。

SQL ServerやDB2などのより重いDBであっても、それはできないと私は信じています。サブクエリまたはビューに対するDELETEは、DBシステムがそれを特定のテーブルに解決する必要があります。

エラーは、(INNER JOINの結果として)ロックされた行の問題だと思います。

+0

私は、単一のステートメントでこれを行うことができるDBMSについてはわかりません(カスケード削除やトリガーは、ステートメントの適切な部分ではなく、後続のエフェクトのさまざまな形態です)。 – RolandTumble

関連する問題