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

Posted

技术标签:

【中文标题】MS Access 使用 SQL INSERT INTO - SELECT FROM 插入记录【英文标题】:MS Access inserting records using SQL INSERT INTO - SELECT FROM 【发布时间】:2020-12-21 18:07:51 【问题描述】:

我不熟悉使用 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], [DocName], [DeptID], [DocTypeID])
SELECT FROM @dno, @dname, (SELECT ID FROM Departments WHERE Dept='Some_Dept_Name'), (SELECT ID FROM DocTypes WHERE DocType='Some_Doc_Type');

尝试 2(失败):

INSERT INTO Documents([DocNo], [DocName], [DeptID], [DocTypeID])
SELECT @dno, @dname, 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.  

【问题讨论】:

【参考方案1】:

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

【讨论】:

以上是关于MS Access 使用 SQL INSERT INTO - SELECT FROM 插入记录的主要内容,如果未能解决你的问题,请参考以下文章

MS Access 的 SQL INSERT INTO 语句

SQL INSERT INTO SUBFORM from QUERY in ms access

强制 SET IDENTITY_INSERT 从 MS Access 更快生效

MS Access UPSERT(更新/插入)SQL [重复]

使用 java 和 sql INSERT Query 在 MS 访问中插入字符串类型变量和日期类型变量

将MS Access表单日期传递到Oracle SQL