MS Access 使用 SQL INSERT INTO - SELECT FROM 插入记录
MS Access inserting records using SQL INSERT INTO - SELECT FROM
我刚开始使用 RDB,并尝试使用 VB.NET 中的 SQL(使用 System.Data.oledb 命名空间)将数据插入到 table 中。我使用以下 SQL 语句在访问数据库 (2019) 中创建了 tables:
第一个table:
CREATE TABLE Departments ([ID] AUTOINCREMENT PRIMARY KEY, [Dept] varchar(100) NOT NULL UNIQUE);
第二个table:
CREATE TABLE DocTypes ([ID] AUTOINCREMENT PRIMARY KEY, [DocType] varchar(100) NOT NULL UNIQUE);
第三个table:
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));
我的目标是将数据添加到第 3 个 table。我可以通过首先查询数据库中的 DeptID 和 DocTypeID(需要两个查询)然后通过 运行 另一个第三个查询来做到这一点(很长的路要走)(我正在使用参数 btw):
INSERT INTO Documents([DocNo], [DocName], [DeptID], [DocTypeID])
VALUES (@dno, @dname, @deptid, @dtypeid);
但是,我的上述方法感觉不是正确的方法。必须有更简单的方法使用单个 SQL 查询将数据插入第三个 table。我尝试了以下但没有成功。
尝试 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.
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
我刚开始使用 RDB,并尝试使用 VB.NET 中的 SQL(使用 System.Data.oledb 命名空间)将数据插入到 table 中。我使用以下 SQL 语句在访问数据库 (2019) 中创建了 tables:
第一个table:
CREATE TABLE Departments ([ID] AUTOINCREMENT PRIMARY KEY, [Dept] varchar(100) NOT NULL UNIQUE);
第二个table:
CREATE TABLE DocTypes ([ID] AUTOINCREMENT PRIMARY KEY, [DocType] varchar(100) NOT NULL UNIQUE);
第三个table:
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));
我的目标是将数据添加到第 3 个 table。我可以通过首先查询数据库中的 DeptID 和 DocTypeID(需要两个查询)然后通过 运行 另一个第三个查询来做到这一点(很长的路要走)(我正在使用参数 btw):
INSERT INTO Documents([DocNo], [DocName], [DeptID], [DocTypeID])
VALUES (@dno, @dname, @deptid, @dtypeid);
但是,我的上述方法感觉不是正确的方法。必须有更简单的方法使用单个 SQL 查询将数据插入第三个 table。我尝试了以下但没有成功。
尝试 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.
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