【问题标题】:Access/SQL Update Query Help [If Statement Issue]Access/SQL 更新查询帮助 [If 语句问题]
【发布时间】:2017-06-09 15:00:53
【问题描述】:

我正在开发一个包含两个需要匹配和更新记录的不同表的数据库。基本上如果两个字符串字段相等,则更新不同的字段。

我无法完全弄清楚。

第一个表IngredientDB包含两个字符串字段Item NumberIngredient Name

第二个表Table Material Label还包括两个字符串字段MaterialCodeMaterialDescription强>

Ingredient NameMaterialDescription 有很多相同的记录,但并非所有记录都相同。
我希望能够

  • 匹配MaterialDescriptionIngredient Name
  • MaterialCode 更新为与项目编号完全相同 对应于Ingredient Name

所以我尝试使用更新查询和 if 语句,这就是它的样子:

  • 字段:材料代码
  • 表格:表格材质标签
  • 更新至:iif([MaterialDescription]=[Ingredient Name],[Item Number],"NotFound")
  • 条件:空白
  • 或:空白

当前的问题是所有MaterialCode 记录都被“未找到”填充,这意味着它由于某种原因找不到任何匹配项...

有没有更简单的方法来完成这一切?我错过了什么吗?抱歉,当谈到 Access 的东西时,我是个新手。还在学习!

编辑: 这是我目前所在的image of。箭头表示我要更改的内容。

图像中的代码,当前出现语法错误

UPDATE [Table Material Label] JOIN [IngredientsDB] on [Table Material Label.MaterialDescription] = [IngredientsDB.Item Number] 
SET [MaterialCode] = [Item Number] 
WHERE [MaterialDescription] = [Ingredient Name]

【问题讨论】:

标签: sql ms-access


【解决方案1】:

根据您的“我希望能够”列表,正确的 SQL 应该是:

UPDATE [Table Material Label] INNER JOIN [IngredientsDB] 
ON [Table Material Label].[MaterialDescription] = [IngredientsDB].[Ingredient Name] 
SET [Table Material Label].[MaterialCode] = [IngredientsDB].[Item Number];

如果您想在这些字段上将MaterialDescription 匹配到Ingredient NameJOIN,则可以设置MaterialCode = Item Number

【讨论】:

    【解决方案2】:

    这取决于您使用的访问版本。 我对访问的前端部分不太熟悉,但是如果您单击设计器的更新查询,然后右键单击您的查询并选择 SQL 视图。 根据您提供的信息,您需要以下内容 UPDATE Table Material Label JOIN 'other table' on Table Material Label.'Here you would put your value that is found on both tables' = 'Other table'.'that column that contains the value' SET MaterialCode = Item Number WHERE MaterialDescription = Ingredient Name

    这应该可以解决问题。就像我说的那样,我不是一个访问专家,我是一个年轻的 SQL 专家哈哈。

    本文http://www.fmsinc.com/microsoftaccess/query/snytax/update-query.html#Update_Query_Examples 应该提供进一步的帮助。

    希望这会有所帮助!

    【讨论】:

    • 谢谢@SithApprentice -- 另外,我正在使用 Access 2016,不确定这是否会有所作为。我想我已经接近了,我已经更改了您发送给我的代码以适合我的表格。虽然我目前遇到语法错误。
    • @Reid 下面的答案显示了最新情况。我刚刚看到你发布的代码。您必须显式调用表,这意味着提供表名称。示例 TableName.TableField 是显式表调用。 kismer 在下面很好地说明了这一点
    猜你喜欢
    • 1970-01-01
    • 2011-08-26
    • 2023-03-28
    • 2014-02-11
    • 1970-01-01
    • 1970-01-01
    • 2011-11-01
    • 2021-02-09
    • 1970-01-01
    相关资源
    最近更新 更多