【问题标题】:How to UPDATE one field of my table with different WHERE conditions in ACCESS (In a SINGLE query)如何在 ACCESS 中使用不同的 WHERE 条件更新表的一个字段(在单个查询中)
【发布时间】:2021-12-11 15:57:39
【问题描述】:

我有以下两个更新请求:

UPDATE TableName
SET Sector = 'NameSector'
WHERE Sector IN('') AND ThType IN ('Test2')

UPDATE TableName
SET Sector = 'NameSector1'
WHERE Sector IN('') AND ThType IN ('Test1');

如何合并?

注意: This Answer does not work on ACCESS

【问题讨论】:

  • WHERE (Sector IN(' ') AMD ThType IN('Test1')) OR (Sector IN(' ') AMD ThType IN('Test2')) 有什么问题
  • @sagi 因为取决于WHERE,值不一样,如果它们相同,它会起作用。我在示例中写错了,现在已编辑,请看一下。
  • 看看我的答案是否适合你

标签: sql ms-access


【解决方案1】:

尝试使用IIf

UPDATE TableName
SET Sector = IIF(Sector IN(' ') AND ThType IN('Test1'), 'NameSector', 'NameSector1')
WHERE (Sector IN(' ') AND ThType IN('Test1')) OR (Sector IN(' ') AND ThType IN('Test2'))

【讨论】:

  • 感谢您的回答。由于@forpas 同时回答了一个较短的代码,我会接受他的。谢谢你和我upvoted你的正确答案,因为我不能同时接受。
  • @Dorian 什么适合你,你应该知道这两个查询不一定具有相同的功能,如果每个WHERE 条件在Sector IN(' ') 中有不同的值,那么@forpas 查询将更新错误的记录。如果它是单个值或所有值都相同,它的工作原理是一样的。
【解决方案2】:

Access 不支持CASE 表达式,但可以使用函数IIF()

UPDATE TableName
SET Sector = IIF('NameSector1' = 'Test1', 'NameSector1', 'NameSector')
WHERE Sector IN('') AND ThType IN ('Test1', 'Test2');

【讨论】:

  • 感谢您提供高质量的回答。你的 SQL 比 @sagi 短,并且做同样的事情。所以对我来说,你的答案是最好的。
  • @Dorian 也可以将Sector IN('') 简化为Sector = '',但我将其保留为以防万一您想在 IN 列表中包含更多值。
  • 如果IN 列表中有多个值,并且它们在两个原始WHERE 子句中不同,那么您将更新不打算更新的记录..
  • @Dorian 条件 Sector IN('') 在这两种情况下都很常见,因为您的问题中有它,因此无需使代码如此复杂。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多