微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

MS Access 使用 SQL INSERT INTO - SELECT FROM 插入记录

如何解决MS Access 使用 SQL INSERT INTO - SELECT FROM 插入记录

我刚开始使用 RDB,并尝试使用来自 VB.NET 的 sql(使用 System.Data.oledb 命名空间)将数据插入到表中。我使用以下 sql 语句在 access 数据库 (2019) 中创建了表:

第一张桌子:

CREATE TABLE Departments ([ID] AUTOINCREMENT PRIMARY KEY,[Dept] varchar(100) NOT NULL UNIQUE);

第二个表:

CREATE TABLE DocTypes ([ID] AUTOINCREMENT PRIMARY KEY,[DocType] varchar(100) NOT NULL UNIQUE);

第三张表:

CREATE TABLE Documents ([ID] AUTOINCREMENT PRIMARY KEY,[DocNo] varchar(255) NOT NULL UNIQUE,[DocName] varchar(255),[DeptID] int REFERENCES Departments(ID),[DocTypeID] int REFERENCES DocTypes(ID));

我的目标是将数据添加到第三个表中。我可以通过首先查询 DeptID 和 DocTypeID 的数据库(需要两个查询)然后按如下方式运行另一个第三个查询(我正在使用参数 btw)来做到这一点(很长的路):

INSERT INTO Documents([DocNo],[DocName],[DeptID],[DocTypeID])
VALUES (@dno,@dname,@deptid,@dtypeid);

但是,我上面的方法感觉不是正确的方法。必须有一种更简单的方法来使用单个 sql 查询将数据插入到第三个表中。我尝试了以下但没有成功。

尝试 1(失败):

INSERT INTO Documents([DocNo],[DocTypeID])
SELECT FROM @dno,(SELECT ID FROM Departments WHERE Dept='Some_Dept_Name'),(SELECT ID FROM DocTypes WHERE DocType='Some_Doc_Type');

尝试 2(失败):

INSERT INTO Documents([DocNo],[DocTypeID])
SELECT @dno,Departments.ID,DocTypes.ID 
FROM DocTypes INNER JOIN (Departments INNER JOIN Documents ON Departments.ID=Documents.DeptID) ON DocTypes.ID=Documents.DocTypeID 
WHERE (Departments.Dept='some_dept_name' AND DocTypes.DocType='some_doc_type');

Kindly suggest if there is more straightforward way to achieve this.  

解决方法

MS Access 需要非空的 FROM 子句,因此您可以使用:

INSERT INTO Documents([DocNo],[DocName],[DeptID],[DocTypeID])
    SELECT @dno,@dname,d.id,dt.id,FROM (SELECT ID FROM DocTypes WHERE DocType = 'Some_Doc_Type') as dt,(SELECT ID FROM Departments WHERE Dept = 'Some_Dept_Name') as d

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。