10

私はかなり機密性の高いデータを扱っているので、それが適切に行われていることを絶対に確信したいと思います。

別のテーブルに関連付けられているテーブルの行を削除しようとしています

テーブルを関連付ける唯一の方法は、他の2つのテーブルを結合することです...

正確なクエリは次のとおりです。

DELETE tt.Transaction_Amount, tt.Transaction_ID
  FROM ItemTracker_dbo.Transaction_Type tt
  JOIN ItemTracker_dbo.Transaction t ON tt.Transaction_ID = t.Transaction_ID
  JOIN ItemTracker_dbo.Purchase p ON p.Transaction_ID = tt.Transaction_ID
  JOIN ItemTracker_dbo.Item i ON i.Item_ID = p.Item_ID
 WHERE i.Client_ID = 1

ご覧のとおり、きれいではありません。

MySQLクエリブラウザを介して奇妙なエラーが発生しています...

MULTIDELETEの不明なテーブル'Transaction_Amount'

私はmysqlのマニュアルを読んでみましたが、これは私にはうまくいくはずです...誰かが何か考えを持っていますか?

4

4 に答える 4

24

tt個々の列ではなく、から行を削除する必要があります。

DELETE tt
  FROM ItemTracker_dbo.Transaction_Type tt
  JOIN ItemTracker_dbo.Transaction t ON tt.Transaction_ID = t.Transaction_ID
  JOIN ItemTracker_dbo.Purchase p ON p.Transaction_ID = tt.Transaction_ID
  JOIN ItemTracker_dbo.Item i ON i.Item_ID = p.Item_ID
 WHERE i.Client_ID = 1
于 2010-01-05T20:41:45.370 に答える
1

構文が正しくありません。との間の列を参照していません。使用する:DELETEFROM

DELETE FROM ItemTracker_dbo.Transaction_Type tt
  JOIN ItemTracker_dbo.Transaction t ON tt.Transaction_ID = t.Transaction_ID
  JOIN ItemTracker_dbo.Purchase p ON p.Transaction_ID = tt.Transaction_ID
  JOIN ItemTracker_dbo.Item i ON i.Item_ID = p.Item_ID
 WHERE i.Client_ID = 1

正しいものを削除していることを確認するために、SELECTステートメントの出力をチェックして、返されるものが前に削除したいものであることを確認する必要があることに同意します。それ以外の場合は、トランザクションで削除を実行して、必要に応じてロールバックできるようにします。

于 2010-01-05T20:41:32.470 に答える
0

最初は、対象の行を返すクエリとして作成する必要があります。それがすべてデバッグされたら、それを削除に変換します。

于 2010-01-05T20:41:24.343 に答える
0

選択クエリで確認し、重要なデータに対して削除クエリを実行する前に、そのテーブルのバックアップを取得します。何か問題が発生した場合でも、少なくともバックアップできます。

于 2012-11-03T06:18:10.073 に答える