En查询思想想知道

时间:2013-06-03 19:08:26

标签: mysql join compare

我试图比较一个超过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的独特关键。

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

由于您不希望TechNum存在于Techs表中,因此很难理解您希望从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表中不存在该技术。因此,技术,名字,姓氏和工作字段都是NULL