2

だから私はそれらの間の関係を持つテーブルにする必要があります-関係タイプ:1対多。そして、次のクエリだと思いました:

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

OrderID = 26 を含む両方のテーブルのすべての行を削除しますが、驚いたことに、次のエラーが発生しました。

could not delete from specified tables

Googleで答えを見つけようとしましたが、事前に感謝します:D

4

2 に答える 2

1

を含む関係を作成することもできます。CASCADE DELETE一方から削除すると、他方からも削除されます。

マイクロソフトから:

リレーションシップを定義するときに [関連レコードの連鎖削除] チェック ボックスをオンにすると、主テーブルのレコードを削除するたびに、Microsoft Access によって関連テーブルの関連レコードが自動的に削除されます。たとえば、Customers テーブルから顧客レコードを削除すると、その顧客のすべての注文が Orders テーブルから自動的に削除されます (これには、Orders レコードに関連する Order Details テーブルのレコードが含まれます)。[カスケード関連レコードの削除] チェック ボックスがオンになっているフォームまたはデータシートからレコードを削除すると、関連レコードも削除される可能性があることが Microsoft Access によって警告されます。ただし、削除クエリを使用してレコードを削除すると、Microsoft Access は関連するテーブルのレコードを警告を表示せずに自動的に削除します。

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

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

Access データベースから 1 つまたは複数のレコードを削除する

于 2012-05-04T16:02:36.250 に答える
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]

もう1つのオプションは、プログラムで実行し、最初に子テーブルの行を削除してから、マスターを削除することです。

于 2012-05-04T16:06:59.337 に答える