【问题标题】:Deleting record from a select query from two tables... which table is affected?从两个表的选择查询中删除记录...哪个表受到影响?
【发布时间】:2017-09-22 18:09:39
【问题描述】:

我有两个连接关系的表。

  1. tblEmployeeDetails
  2. tblEmployeeDocument 到期

表以一对多的形式连接,并选择了强制参照完整性。

我有一个查询,它结合了两个表 [queryEmployees] 中的数据。
我有一个表单可以在该查询 [frmEmployeeMgmt] 上输入/更新/删除数据。

我的问题只是从该查询中删除记录。当我删除一条记录时,它只会从一个表中删除[EmployeeDocumentExpiry]。我正在寻找这样一种情况,即当从该查询中删除一条记录时,它会从两个表中删除。

请有任何想法。 https://i.stack.imgur.com/WbWMb.png

【问题讨论】:

  • 也许我应该问:从选择查询中删除表行是否正常/可以?
  • 如果你有一对多的参照完整性,为什么在删除“多”记录的时候还要删除“一”记录?我可以理解您想在删除员工时删除所有文档,但我不明白您为什么要反其道而行。
  • 我真的想从查询中删除员工(一条记录)。但是 Access 删除了许多记录并保留了一条。换句话说,删除命令是为了删除员工。似乎我无法从表中删除员工记录。从组合了一个表和一个多表的查询中删除一条记录将删除多条记录并保留一条。是否可以将一对多关系更改为一对一?
  • 我现在明白了,您不能将关系更改为一对一,因为在这种情况下,每个员工只能拥有一份文件。无论如何,您不需要查询来执行此操作,您可以将关系配置为在删除“一个”时自动删除“许多”记录,我会给出答案。

标签: sql ms-access vba


【解决方案1】:

我认为您的两个表需要具有相同的外键才能执行删除,但它会删除所有具有该 EmpID 的文档。

delete tblEmpDetails, tblEmpDocExp from tblEmpDetails inner join tblEmpDocExp where tblEmpDetails.EmpID = tblEmpDocExp.EmpID and tblEmpDetails.EmpID = '999';

OR 在下面的两个语句中

delete from tblEmpDetails where tblEmpDetails.EmpID = '999'
delete from tblEmpDocExp where tblEmpDocExp.EmpID = '999'

希望这会有所帮助。

【讨论】:

  • 感谢您的回复。我不是专家。我应该在哪里放置该代码?我认为 Access 中会有一个选项来实现它。
【解决方案2】:

如果您有一对多关系,并且想在删除“一”记录时删除所有相关的记录,您可以配置它的关系属性:选择关系,双击它以显示其属性并检查“级联删除相关记录”。

启用此选项后,您只需从员工表中删除记录,而不是因引用错误而失败,数据库将删除与该员工相关的所有记录(小心使用)。

【讨论】:

    猜你喜欢
    • 2016-05-20
    • 1970-01-01
    • 1970-01-01
    • 2014-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-03
    • 1970-01-01
    相关资源
    最近更新 更多