Mysql 我的头脑想知道

Mysql 我的头脑想知道,mysql,join,compare,Mysql,Join,Compare,我试图比较一个超过300000行的庞大表格和一个小得多的表格,看看数据是否在大表格中,而不是在小表格中。以下是我的基本想法: 代码: Techs.TechNum是Techs的唯一密钥 一如既往地感谢你的帮助, 蒂姆如果我理解正确 使用左连接: SELECT TOAWorkOrdersNew.TechNum AS TOATechNum, TOAWorkOrdersNew.FirstName AS TOAFirst, TOAWorkOrdersNew.LastName AS TOAL

我试图比较一个超过300000行的庞大表格和一个小得多的表格,看看数据是否在大表格中,而不是在小表格中。以下是我的基本想法:

代码:

Techs.TechNum是Techs的唯一密钥

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

如果我理解正确

使用左连接:

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
要查找两个表中的所有连接,可以将其更改为内部连接(去掉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

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

这里有一个选项,使用
外部联接
并检查
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'
这将返回ToWorkOrdersNew中technum在techs表中不存在的所有记录。因此,technum、firstname、lastname和job字段都将
NULL


看,你真的无法避免学习SQL…如果TechNum在Techs表中不存在,你希望如何从Techs表返回数据?不要将
WorkDate
标准放在
外部联接中
——它不会返回正确的结果。将其向下移动到
WHERE
子句中。
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'