УДАЛИТЕ данные из таблицы, объединяясь по двум таблицам

Я работаю с некоторыми довольно конфиденциальными данными, поэтому я хочу быть абсолютно уверенным, что я делаю это правильно.

Я пытаюсь удалить строки в таблице, связанные с другой таблицей

Единственным способом связать таблицу является объединение двух других таблиц...

вот точный запрос:

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...

Unkown table 'Transaction_Amount' в MULTI DELETE

Я пробовал читать руководство по mysql, и похоже, что это сработает для меня... у любой есть идеи?

Ответ 1

Вам нужно удалить строки из 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

Ответ 2

Синтаксис неверен - вы не ссылаетесь на столбцы между DELETE и FROM. Использование:

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

Чтобы быть уверенным, что вы удаляете правильный материал, я согласен с wallyk, что вы должны проверить вывод инструкции SELECT, что возвращаемое - это то, что вы хотите удалить до. В противном случае выполните удаление в транзакции, чтобы при необходимости отбросить ее.

Ответ 3

Сначала вы должны составить его как запрос, чтобы вернуть интересующие строки. После этого все отлаживаются, а затем преобразуйте его в delete.

Ответ 4

Проверить с помощью запроса select, а затем перед выполнением запроса удаления на критические данные получить резервную копию этой таблицы. настолько простой, как если бы что-то не так, но вы можете хотя бы сделать резервную копию.