从两个表连接中删除数据

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手册,但似乎应该可以使用这种方法... 有没有人有什么想法?


你的查询似乎没有使用你已经连接到其他地方的Transaction表,这是有意为之吗? - Mark Byers
在进行删除操作之前,请确保您已经备份了数据/数据库。 - Raj More
Transaction_Type是一张表吗?看起来你试图从表中删除2列而不是行... - Nathan Wheeler
4个回答

25
你需要从 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

在多表删除中,您必须在DELETEFROM之间使用名称或别名指定要从中删除的表。 - David M
@md5sum:这是用于多表删除的,但我也不知道它在这个例子中是否有差别。 - OMG Ponies
@DavidM 很棒的回答和评论,解决了我近3年来的问题 =) - Windle
@Windle - 很好,我喜欢看到旧的答案仍然能帮助人们。 - David M

1

语法不正确 - 在 DELETEFROM 之间 不引用列。请使用:

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语句的输出结果,以确认需要删除的内容是否正确。否则,可以在事务中执行删除操作,以便在需要时进行回滚。

1
不要以为那会有效 - 请检查我回复你上面的评论。 - David M

0

你应该先将其组成一个查询以返回感兴趣的行。一旦所有调试完成,再将其转换为删除操作。


0

在执行关键数据的删除查询之前,使用选择查询进行检查,并备份该表。如果出现任何问题,您至少可以恢复备份。这很简单。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接