基于另一个查询的 MS Access SQL 更新查询

Posted

技术标签:

【中文标题】基于另一个查询的 MS Access SQL 更新查询【英文标题】:MS Access SQL update query based on another query 【发布时间】:2015-09-24 14:18:54 【问题描述】:

我的数据库有现有数据。我正在尝试实施某种安全权限系统。它不需要真正安全......只需限制每个级别可以有效更改的内容。从技术上讲......存在一个......但需要加强。

我需要为教师调整现有的权限级别。我有一个查询(qInstructors),它列出了类表中列为 Instructor 的任何人的 DISTINCT 查询。共有38位导师。

现在我需要更新 User 表来调整这 38 个人的权限......这就是我卡住的地方。一个简单的更新查询,没问题。但是我一定不能用正确的术语进行搜索,因为我找不到任何可以帮助我敲定 SQL 的东西。

UPDATE tblUserList 
INNER JOIN tblUserList ON tblUserList.NTID = qInstructors.Instructor 
SET tblUserList.Rights = 2
WHERE [NTID]=[Instructor];

当我尝试运行它时,我在 JOIN 中遇到语法错误。这超出了我的 SQL 知识范围...任何线索?

【问题讨论】:

【参考方案1】:

我建议使用IN

UPDATE tblUserList 
    SET tblUserList.Rights = 2
    WHERE [NTID] IN (SELECT [Instructor] FROM qInstructors);

JOINUPDATE 子句中的使用因数据库而异。 IN 版本是 ANSI 标准,应该可以在 MS Access 和您可能使用的任何后端数据库中工作。

【讨论】:

【参考方案2】:

您在join 子句中指定了tblUserlist 而不是qinstructors

UPDATE tblUserList 
INNER JOIN qInstructors ON tblUserList.NTID = qInstructors.Instructor 
SET tblUserList.Rights = 2

【讨论】:

这确实解决了错误,我可以查看匹配的结果行​​......但是我显然使用的是不可更新的查询并且实际上无法更新。【参考方案3】:

在设计视图中创建查询。将类型更改为“更新查询”。

将您的目标表添加到查询中,并添加您现有的“给我讲师”查询。

从目标表中的 ID 拖一条线到查询返回的相应 ID。

将要更新的字段向下拖动到底部的网格中。在“更新至”字段中,输入“允许”或“真”或任何表示允许教师使用的内容。

【讨论】:

以上是关于基于另一个查询的 MS Access SQL 更新查询的主要内容,如果未能解决你的问题,请参考以下文章

使用 SQL 从另一个 Access 表更新 MS Access 表

通过 MS Access 例程更新 SQL Server(内部连接错误)

返回基于多个条件 SQL、MS Access 的非不同行

更新查询的 MS Access SQL 错误

Ms Access:来自另一个子表单的子表单重新查询未更新

引用其他表的 SQL MS Access 条件更新查询