繁体   English   中英

Microsoft Access 使用选择查询数据更新特定表列

[英]Microsoft Access update specific table column with select query data

我目前尝试使用 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..

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

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

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

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

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

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

看起来您正在阅读与 TSQL 相关的帖子,这是 SQL Server 的风格,而不是 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()));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM