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

MS Access SQL插入到不存在记录的表中,sql,ms-access,select,insert-into,Sql,Ms Access,Select,Insert Into,我正在为我的工作构建一个Access数据库,我有点被如何执行INSERT INTO SQL查询所困扰。我有一个表(tblTempData),其中包含从Excel导入的数据。其中2列分别包含病房和顾问的姓名。通过将它们的名称与tblWard和tblConsultant表中存储的名称进行比较,我已将它们转换为正确的WardID和CONSUltID 在我的工作中,一个病房可以有许多顾问,一个顾问可以在许多病房工作,因此我制作了一个名为TBLWARDCONSULTER的桥接表,它有一个主键以及WardI

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

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

例如

由于人员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
所以问题是如何做到这一点!我曾尝试使用下面的代码只进行查询的select部分,但这将返回所有ward/CONSULTER组合,无论它们是否在TBLWARDCONSULTER表中。将其更改为“存在的位置”不会返回任何结果:

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;

作为另一种选择,考虑使用左联接…为空查询(避免子查询,如果不执行,可读性可能更好):


非常好用,非常感谢!只需要将twc.consltanti更改为twc.ConsultantID,tw.ConsultantID更改为td.ConsultantID,但其他方面都很完美!经过测试,我发现第一行中需要一个SELECT DISTINCE才能满足我的要求,但仍然很好。@DavidAustin。如果您需要
distinct
,则在
tblTempData
中有重复项,这可能是不可取的。tblTempData中会有重复项,因为它包含与相关病房和顾问相连的患者数据,因此同一病房中会有多个患者与同一顾问同时出现
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;
SELECT tblWardConsultant.WardID, tblWardConsultant.ConsultantID 
FROM tblWardConsultant 
LEFT JOIN tblTempData
       ON tblWardConsultant.WardID = tblTempData.WardID 
      AND tblWardConsultant.ConsultantID = tblTempData.ConsultantID
WHERE tblWardConsultant.WardID IS NULL
AND tblWardConsultant.ConsultantID IS NULL;