sql - MS Access SQL 插入到不存在记录的表中

标签 sql ms-access select insert-into

我正在为我的工作构建 Access 数据库,但我对如何执行 INSERT INTO SQL 查询有点困惑。我有一个表 (tblTempData),其中包含从 Excel 导入的数据。其中 2 栏分别包含病房和顾问的姓名。通过将它们的名称与我的 tblWard 和 tblConsultant 表中存储的名称进行比较,我已将它们转换为正确的 WardID 和 ConsultantID。

在我的工作中,一个病房可以有很多顾问,一个顾问可以在很多病房工作,所以我制作了一个名为 tblWardConsultant 的桥接表,它有一个主键以及 WardID 和 ConsultantID 的外键。我现在需要将 tblTempData 中的记录与 tblWardConsultant 进行比较,并将当前不存在的任何病房/顾问组合添加到 tblWardConsultant 中。

例如

 tblWard:  WardID: 1, WardName: Ward X
           WardID: 2, WardName: Ward Y

 tblConsultant: ConsultantID: 1, ConsultantName: Person A
                ConsultantID: 2, ConsultantName: Person B

由于人员 A 可以在病房 X 和 Y 工作,人员 B 在病房 X 工作,因此他们位于以下桥接表中:

 tblWardConsultant: WardConsultantID: 1, WardID: 1, ConsultantID: 1
                    WardConsultantID: 2, WardID: 2, ConsultantID: 1
                    WardConsultantID: 3, WardID: 1, ConsultantID: 2

如果在我的tblTempData中,我发现B也在Y病房工作,我需要将WardID和ConsultantID添加到tblWardConsultant中作为新记录,如下:

 tblWardConsultant: WardConsultantID: 4, WardID: 2, ConsultantID: 2

所以问题是如何做到这一点!我尝试使用下面的代码来创建查询的选择部分,但这会返回所有病房/顾问组合,无论它们是否在 tblWardConsultant 表中。将其更改为 WHERE EXISTS 不会返回任何结果:

SELECT tblTempData.WardID, tblTempData.ConsultantID
FROM tblTempData
WHERE NOT EXISTS (
SELECT tblWardConsultant.WardID, tblWardConsultant.ConsultantID
FROM tblWardConsultant)
AND tblTempData.WardID IS NOT NULL
AND tblTempData.ConsultantID IS NOT NULL;

最佳答案

您需要一个相关子查询,例如:

SELECT DISTINCT td.WardID, td.ConsultantID
FROM tblTempData as td
WHERE NOT EXISTS (SELECT twc.WardID, twc.ConsultantID
                  FROM tblWardConsultant as twc
                  WHERE twc.WardId = td.WardId AND twc.ConsultantId = tw.ConsultantId
                 ) AND 
      td.WardID IS NOT NULL AND
      td.ConsultantID IS NOT NULL;

关于sql - MS Access SQL 插入到不存在记录的表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33649350/

相关文章:

sql - 从关系代数到SQL

ms-access - 是否有一种简单的方法可以在此 Access 数据库架构中填充下拉列表?

mysql - 大型 UPDATE [...] SELECT FROM 导致并行 UPDATE/DELETE 终止

SQL SELECT 多列合二为一

php - MySQL数据库组织和PHP选择

sql - 如何从具有特定组计数的表中获取所有行?

sql - Oracle 插入失败 : not a valid month

sql - 解析逗号分隔的字符串以生成Where子句中的IN字符串列表

sql - 相关记录的条件计数

ms-access - (ColdFusion + Access) 数据库查询错误 "Too few parameters."