УДАЛИТЕ данные из таблицы, объединяясь по двум таблицам
Я работаю с некоторыми довольно конфиденциальными данными, поэтому я хочу быть абсолютно уверенным, что я делаю это правильно.
Я пытаюсь удалить строки в таблице, связанные с другой таблицей
Единственным способом связать таблицу является объединение двух других таблиц...
вот точный запрос:
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, а затем перед выполнением запроса удаления на критические данные получить резервную копию этой таблицы. настолько простой, как если бы что-то не так, но вы можете хотя бы сделать резервную копию.