查询表上的访问更新

时间:2018-07-31 12:08:59

标签: sql ms-access access-vba sql-update subquery

我目前正在将Access数据库转换为SQL。通过它时,我发现了这个。

Update EmployeeCustomerOrderDetail set Valid = -1;

这很奇怪,因为EmployeeCustomerOrderDetail是下面定义的查询。

Select * 
From Employee 
   inner join Order on Employee.EmployeeID = Order.EmployeeID 
   inner join Customer on Order.CustomerID = Customer.CustomerID 
   inner join OrderDetail on Order.OrderID = OrderDetail.OrderID

我认为这没有任何效果,因为“ Select”上的更新无法正常工作,但是我用

进行了测试
Update (Select * From Employees) as Emp set Emp.WorkPhone as 'Random Value'

它奏效了。

那么我的问题是,这是如何处理的。更新是否会遍历所有查询表,直到找到dataTable?它会更改引用列的值还是关联表中的实际数据?

1 个答案:

答案 0 :(得分:0)

这仅适用于可更新的记录集。就像直接在Access查询中更改值一样。

在可更新记录集中,数据集(查询)中的每个字段都直接绑定到表中的字段。这意味着更新会直接影响查询的基础表。您可以查看this answer,了解有关哪些记录集可更新和不可更新的规则。

与此有关的另一个真正相反的事情是,具有外部联接的记录集可以包含可更新的不匹配记录。在这种情况下,将在表中创建一条不包含匹配记录的记录,然后创建一条新记录。