1

我正在尝试比较一个包含超过 300,000 行的庞大表和一个小得多的表,以查看数据是否在大表中而不是在小表中。这是我的基本想法:

代码:

select TOAWorkOrdersNew.TechNum AS TOATechNum,
TOAWorkOrdersNew.FirstName AS TOAFirst,
TOAWorkOrdersNew.LastName AS TOALast,
TOAWorkOrdersNew.Title AS TOATitle,
TOAWorkOrdersNew.WorkDate AS TOAWorkDate,
Techs.TechNum AS TechNum,
Techs.FirstName AS FirstName,
Techs.LastName AS LastName,
Techs.JobDesc AS Job

from TOAWorkOrdersNew, Techs

where 

!!!!!    TOAWorkOrdersNew.WorkDate between '2013-05-15' and '2013-05-31' AND
TOAWorkOrdersNew.TechNum ***IS NOT FOUND INSIDE*** Techs.TechNum    !!!

Techs.TechNum 是 Techs 的唯一键。

一如既往地感谢您的帮助,蒂姆

4

2 回答 2

0

如果我理解正确的话......

使用左连接:

SELECT TOAWorkOrdersNew.TechNum AS TOATechNum,
    TOAWorkOrdersNew.FirstName AS TOAFirst,
    TOAWorkOrdersNew.LastName AS TOALast,
    TOAWorkOrdersNew.Title AS TOATitle,
    TOAWorkOrdersNew.WorkDate AS TOAWorkDate,
    Techs.TechNum AS TechNum,
    Techs.FirstName AS FirstName,
    Techs.LastName AS LastName,
    Techs.JobDesc AS Job
FROM Techs LEFT JOIN TOAWorkOrdersNew ON TOAWorkOrdersNew.TechNum = Techs.TechNum 
    AND TOAWorkOrdersNew.WorkDate BETWEEN '2013-05-15' and '2013-05-31' 
WHERE TOAWorkOrdersNew.TechNum IS NULL

要查找两个表中的所有 ARE,您可以将其更改为内部连接(摆脱 IS NULL 语句)或将 IS NULL 更改为 IS NOT NULL。

真的,如果您只对查找另一个表中没有记录的记录感兴趣,我希望得到以下内容:

SELECT t.firstName, t.lastName, t.jobDesc [job]
FROM Techs t
    LEFT JOIN TOAWorkOrdersNew toa ON toa.techNum = t.techNum 
       AND toa.WorkDate BETWEEN '2013-05-15' and '2013-05-31' 
WHERE toa.technum IS NULL
于 2013-06-03T19:16:50.783 回答
0

很难理解您想从 Techs 表中返回什么,因为您不希望 TechNum 存在于 Techs 表中。

这是一个使用OUTER JOIN和检查的选项NULL

select TOAWorkOrdersNew.TechNum AS TOATechNum,
    TOAWorkOrdersNew.FirstName AS TOAFirst,
    TOAWorkOrdersNew.LastName AS TOALast,
    TOAWorkOrdersNew.Title AS TOATitle,
    TOAWorkOrdersNew.WorkDate AS TOAWorkDate,
    Techs.TechNum AS TechNum,
    Techs.FirstName AS FirstName,
    Techs.LastName AS LastName,
    Techs.JobDesc AS Job
from TOAWorkOrdersNew left join 
    Techs on TOAWorkOrdersNew.TechNum = Techs.TechNum 
where Techs.TechNum is null 
    and TOAWorkOrdersNew.WorkDate between '2013-05-15' and '2013-05-31'

这将返回 TOAWorkOrdersNew 中 techs 表中不存在 technum 的所有记录。所以 technum、firstname、lastname 和 job 字段都是NULL.

于 2013-06-03T19:17:35.623 回答