УДАЛИТЬ данные из таблицы, объединяя две таблицы - PullRequest
10 голосов
/ 05 января 2010

Я работаю с некоторыми довольно конфиденциальными данными, поэтому хочу быть АБСОЛЮТНО уверенным, что делаю это правильно.

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

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

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

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

Неизвестная таблица 'Transaction_Amount' в MULTI DELETE

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

Ответы [ 4 ]

23 голосов
/ 05 января 2010

Вам необходимо удалить строки из 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
1 голос
/ 05 января 2010

Синтаксис неверен - вы не ссылаетесь на столбцы между 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, что возвращаемое - это то, что вы хотите удалить до этого. В противном случае выполните удаление в транзакции, чтобы при необходимости вы могли откатить ее.

0 голосов
/ 03 ноября 2012

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

0 голосов
/ 05 января 2010

Вы должны составить его изначально как запрос, чтобы вернуть интересующие строки. Как только все это отлажено, преобразуйте его в удаление.

...