[英]Microsoft Access update specific table column with select query data
我目前尝试使用 Microsoft Access 中的选择查询中的数据更新一个表。 在过去的三个小时里,我浏览了很多线程、论坛和主题,但我尝试过的一切都没有奏效。 我对 SQL 比较陌生,所以它更难。
到目前为止我发现的重要事情:
考虑这些简化的表格
这个应该会收到更新
| 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.