我正在尝试比较一个包含超过 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 的唯一键。
一如既往地感谢您的帮助, 蒂姆
最佳答案
很难理解您想从 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
。
关于mysql - En 询问的头脑想知道,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16904052/