从表中删除数据,通过两个表连接

时间:2010-01-05 20:37:17

标签: mysql sql sql-delete

我正在使用一些相当敏感的数据,所以我想绝对确定我做得很好。

我正在尝试删除表中与另一个表

关联的行

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

这是确切的查询:

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

如您所见,它并不漂亮。

我通过My​​SQL查询浏览器得到了一个奇怪的错误......

  

MULTI DELETE中的未知表'Transaction_Amount'

我试过阅读mysql手册,看起来这应该对我有用......任何人都有任何想法吗?

4 个答案:

答案 0 :(得分:23)

您需要删除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 :(得分:1)

语法不正确 - DELETEFROM之间的don't reference columns。使用:

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语句的输出,即返回的内容是您之前要删除的内容。否则,在事务中执行删除操作,以便在需要时将其回滚。

答案 2 :(得分:0)

您应该首先将其组合为查询以返回感兴趣的行。一旦完成调试,就将其转换为删除。

答案 3 :(得分:0)

选中查询,然后在对关键数据执行删除查询之前获取该表的备份。如果出现任何问题就这么简单,那么你至少可以备份。