10

我正在处理一些相当敏感的数据,所以我想绝对确定我做得正确。

我正在尝试删除与另一个表关联的表中的行

关联表的唯一方法是通过另外两个表连接......

这是确切的查询:

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 查询浏览器遇到了一个奇怪的错误......

MULTI DELETE 中的未知表“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

语法不正确 - 您没有引用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 语句的输出,即返回的内容是您想要删除的内容。否则,在事务中执行删除,以便在需要时回滚。

于 2010-01-05T20:41:32.470 回答
0

您最初应该将其组合为查询以返回感兴趣的行。一旦全部调试完毕,然后将其转换为删除。

于 2010-01-05T20:41:24.343 回答
0

检查选择查询,然后在对关键数据执行删除查询之前获取该表的备份。如此简单,好像出了什么问题,那么您至少可以备份。

于 2012-11-03T06:18:10.073 回答