【问题标题】:DELETE data from a table, joining through two tables从表中删除数据,通过两个表连接
【发布时间】:2010-01-05 20:37:16
【问题描述】:

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

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

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

这是确切的查询:

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_Type 是表吗?看起来您正在尝试从表中删除 2 列而不是行...

标签: mysql sql sql-delete


【解决方案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

【讨论】:

  • 您必须在多表删除中使用名称或别名在DELETE 和FROM 之间指定要删除的表
  • @md5sum:这是多表删除,但我也不知道在这个例子中是否会产生差异
  • @DavidM 很好的回答和评论,差不多 3 年后解决了我的问题 =)
  • @Windle - 很好,喜欢旧答案仍然可以帮助人们。
【解决方案2】:

语法不正确 - 你的 don't reference columns 在 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】:

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

【讨论】:

    【解决方案4】:

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

    【讨论】:

      猜你喜欢
      • 2017-04-30
      • 2012-06-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-14
      • 1970-01-01
      • 2016-07-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多