那不是正确的表:Access擦除了错误的数据

时间:2014-08-05 10:26:04

标签: sql ms-access ms-access-2010 inner-join

我......不知道我是否对此有正确的想法。

我写了以下内容,以获取两个地方存在的一些数据: -

Select TableOne.*
from TableOne inner join TableTwo
on  TableOne.[LINK] = TableTwo.[LINK]

现在,我对此的解释是:

  • 找到表格" TableOne"
  • LINK字段与表格中的相应字段匹配" TableTwo"
  • 仅显示TableOne 中与TableTwo相匹配的记录

为了确保,我使用SSMS中的一些示例表运行查询,并且它按预期工作。

那么,当我从该查询中删除行时,为什么要删除TableTwo中的行,并按预期从TableOne中删除 NOT ?我刚刚失去了3天的工作时间。

编辑:为清楚起见,我在查询窗口中手动选择了行并删除了它们。我没有使用删除查询 - 最近我被这几次惹恼了。

3 个答案:

答案 0 :(得分:2)

由于您已手动删除记录,因此您的查询必须是可更新的。这意味着您的查询不能仅仅是一个笛卡尔连接或没有参照完整性的连接,因为这些查询在ms访问中是不可更新的。

当我根据没有索引或主键的两个字段重新创建查询时,我甚至无法手动删除记录。这让我相信在不知不觉中建立了一种关系,删除了表二中的记录。也许您应该查看查询和关系窗口的设计视图,因为查询本身确实应该只选择表1中的记录。

答案 1 :(得分:0)

不确定为什么会被删除,但我建议重写您的查询:

delete TableOne
where  LINK in (select LINK from TableTwo)

答案 2 :(得分:0)

这应该适合你:

DELETE TableOne 
    FROM TableOne a
    INNER JOIN
    TableTwo b on b.Bid = a.Bid
    and [my filter condition]