2010-01-05 92 views
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查询浏览器...

未知表“TRANSACTION_AMOUNT”在多张删除

我试着阅读MySQL手册,它似乎这应该对我工作...任何人有任何想法的?

+0

您似乎没有使用您在查询中其他位置加入的事务表。这是故意的吗? – 2010-01-05 20:42:03

+0

确保在删除之前备份了数据/数据库。 – 2010-01-05 20:42:14

+0

是Transaction_Type一个表吗?它看起来像你试图从表中删除2列而不是行... – 2010-01-05 20:44:46

回答

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 
+0

谢谢!它工作完美=) – 2010-01-05 20:47:23

+0

你必须指定表删除,无论是名称或别名,在'删除'和'FROM'多表删除 – 2010-01-05 20:48:24

+0

@ md5sum:这是为多表删除,但我也不知道在这个例子中是否会产生差异 – 2010-01-05 20:48:40

0

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

+0

我有。选择工作正常。 – 2010-01-05 20:43:19

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

+1

不要以为这会奏效 - 请查看我对上述评论的回复。 – 2010-01-05 20:48:57

0

检查与选择查询,然后执行删除查询的关键数据得到该表的备份之前。如此简单,就好像任何事情出错了,那么你至少可以备份。