我目前正在尝试使用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的用户名尝试登录的用户数量来更新Login值,这些用户将是带有*的用户,下面加*的总数为
这将是:
| 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。.
如果有所不同,“我的工作表”会列在“查询”而不是“表”下?
答案 0 :(得分:1)
一旦正确使用了语法,就会遇到
操作必须使用可更新的查询
因为子查询使用聚合,因此是只读的。
为此使用域功能(此处为DCount
)
UPDATE [Test]
SET [Test].[Login] = DCount("*", "[Sheet]", "[User] LIKE '*Guest*'")
WHERE Test.[Date] = Date();
答案 1 :(得分:0)
您似乎正在阅读与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()));