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