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

时间:2018-08-09 09:43:58

标签: sql ms-access

我目前正在尝试使用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的用户名尝试登录的用户数量来更新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。.

如果有所不同,“我的工作表”会列在“查询”而不是“表”下?

2 个答案:

答案 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()));