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

时间:2015-11-11 11:12:32

标签: sql ms-access select insert-into

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

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

E.g。

 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;

2 个答案:

答案 0 :(得分:1)

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

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;

答案 1 :(得分:1)

作为替代方案,请考虑使用LEFT JOIN ... IS 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;