【问题标题】:Microsoft Access update specific table column with select query dataMicrosoft Access 使用选择查询数据更新特定表列
【发布时间】:2020-01-15 06:17:16
【问题描述】:

我目前尝试使用 Microsoft Access 中的选择查询中的数据更新一个表。在过去的三个小时里,我浏览了很多主题、论坛和主题,但我尝试过的没有任何效果。我对 SQL 比较陌生,所以它变得更加困难。

到目前为止我发现的重要事情:

  • 在常规 sql 中使用 where/like 你使用 % 而我必须在 Microsoft Access 中使用 *(无法确认这一点,因为我的更新不起作用)
  • 可以在 SET 之后的变量名前面放一个 @ 符号(不确定这是做什么的,但它说明了动态更新)

考虑这些简化的表格

这个应该会收到更新

|   Date      |  Login  |
----------------------
|  5.01.2018  |         |
|  4.01.2018  |         |
|  3.01.2018  |         |
|  2.01.2018  |         |
|  1.01.2018  |         |

这个应该是提供数据的

|   User   | Attemps |
----------------------
|  Guest5  |    2    |
|  CEO     |    4    |
|  IGuest2 |    6    |
|  Guest1  |    7    |
|  NoGuest |    8    |

我目前尝试使用尝试使用包含 Guest 的用户名登录的用户数量来更新登录值,这些将是下面标有 * 的用户,总计为 4

这将是:

|   User   | Attemps |
----------------------
|  Guest5  |    2    |  *
|  CEO     |    4    |
|  IGuest2 |    6    |  *
|  Guest1  |    7    |  *
|  NoGuest |    8    |  *

假设这张表是从今天 (05.01.2018) 开始的,现在我想用这些数据更新我的另一个表,这样我就会得到一个看起来像这样的表

|   Date      |  Login  |
----------------------
|  5.01.2018  |    4    |
|  4.01.2018  |         |
|  3.01.2018  |         |
|  2.01.2018  |         |
|  1.01.2018  |         |

到目前为止,我已经浏览了十几个论坛帖子,并且我设法实际设置了一个值,但不是从另一个表中选择它。 例如,这可以正常工作:

UPDATE [Test]
SET [Test].[Login] = 4
WHERE (((Test.Date)=Date()));

当我尝试用实际的表格数据更新它们时,例如

1.

UPDATE [Test]
SET [Test].[Login] = SUM( CASE WHEN [Sheet].[User] LIKE '*Guest*' THEN 1 ELSE 0 END)
WHERE (((Test.Date)=Date()));

2.

UPDATE [Test]
SET [Test].[Login] = (SELECT COUNT(*) FROM [Sheet].[User] WHERE User LIKE '*Guest*')
WHERE (((Test.Date)=Date()));

我总是面对

查询表达式中的语法错误(缺少运算符)


我将在下面使用它来表示我当前得到的内容以及它给我带来的错误:

UPDATE [Test]
SET [Test].[Login] = (SELECT COUNT(*) FROM [Sheet].[User] WHERE [User] LIKE "*Guest*")
WHERE (((Test.Date)=Date()));

找不到 $PATH_HERE..

如果有区别的话,我的工作表会列在查询而不是表下吗?

【问题讨论】:

  • 虽然您的 Access 语法可能已关闭,但我也不明白您的更新背后的逻辑。

标签: sql ms-access


【解决方案1】:

一旦你掌握了正确的语法,你就会遇到

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

因为子查询使用聚合,因此是只读的。

为此使用域函数(此处为 DCount):

UPDATE [Test]
SET [Test].[Login] = DCount("*", "[Sheet]", "[User] LIKE '*Guest*'")
WHERE Test.[Date] = Date();

【讨论】:

    【解决方案2】:

    看起来您正在阅读与 SQL Server 风格的 TSQL 相关的帖子,而不是 MS Access SQL。

    除了通配符的区别(MS Access 使用 * 和 ? 而不是 TSQL 的 % 和 _)之外,您还需要用双引号 "" 而不是 TSQL 的单引号将字符串括起来。

    试试这个:

    UPDATE [Test]
    SET [Test].[Login] = (SELECT COUNT(*) FROM [Sheet].[User] WHERE User LIKE "*Guest*")
    WHERE (((Test.Date)=Date()));
    

    【讨论】:

    • Access 也适用于单引号。但UserReserved word,必须用方括号转义。
    • 嗨,斯蒂芬,感谢您的快速回复!正如安德烈所说,我已经编辑了我的查询并将用户放入方括号中。我现在遇到另一个错误,我现在会更新我的帖子。
    • 如果您有新问题,请不要编辑您的帖子。提出一个新问题,并将这个问题留给可能有同样问题的其他人。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多