【问题标题】:Updating table and setting the field values to the result of a left join更新表并将字段值设置为左连接的结果
【发布时间】:2019-02-01 00:42:25
【问题描述】:

我有一个包含字段供应商(“公司 A”、“公司 B”、“交易者 X”)的销售表,并且我创建了一个名为供应商的单独表,其中包含两个字段:供应商 ID 和供应商名称。

我想删除表 Sales 中的 Vendor 字段并将其替换为 VendorID 字段并使用相应的 VendorID 填充该字段。换句话说,将 Sales 表中的供应商名称替换为 Vendors 表中的 ID。

我尝试了许多解决方案,但它们都不起作用。这是我认为可行的方法。销售表中的某些条目没有列出任何供应商。有 203 个条目,左连接在单独运行时返回所有 203 个供应商和相应的空值。

Update Sales
Set Sales.VendorID = (Select VendorID From Vendors v Left Join Sales s on 
v.VendorName = s.Vendor);

当我运行它时,我得到一个对话框询问:

输入参数值

或者我收到错误消息:

操作必须使用可更新的查询

我正在使用 MS Access 2016。

【问题讨论】:

  • 只想说清楚。既然需要更新Sales表的vendor_id列的值,那么子查询join不应该写成v.vendor_name=s.vendors,而不是他们的id吗?抱歉,我对 MS Access 不太了解,我不确定错误消息。
  • 正确。我很抱歉。我已经研究这个问题一段时间了。

标签: sql ms-access ddl


【解决方案1】:

我认为您不需要子查询,您可以使用UPDATE ... JOIN ... SET 语法,例如:

UPDATE sales AS s
INNER JOIN Vendors AS v ON v.VendorName = s.Vendor
SET s.VendorID = v.VendorID

【讨论】:

  • 我将 INNER JOIN 更改为 LEFT JOIN 并且能够做我需要的事情。谢谢。
  • @Albert : LEFT JOIN 将导致在Vendors.VendorName 中找不到Vendorsales 记录被设置为NULL 是你想要的吗?
  • 是的,正如我在问题中所说的那样。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-13
  • 2017-10-06
  • 1970-01-01
  • 1970-01-01
  • 2016-11-05
相关资源
最近更新 更多