MySQL查询:找出两张表中互不包含的记录
解决方法:找出两张表中互不包含的时间记录
没问题,要找出table_datetime1和table_datetime2里各自独有的那两条时间记录,这里有两种实用的MySQL查询方案,逻辑清晰且高效:
方案一:用NOT EXISTS + UNION组合查询
这种方式分别筛选出每张表中对方没有的记录,再合并结果,可读性很强:
-- 获取table_datetime1独有的时间 SELECT dt AS unique_datetime FROM table_datetime1 WHERE NOT EXISTS ( SELECT 1 FROM table_datetime2 WHERE table_datetime2.dt = table_datetime1.dt ) UNION -- 获取table_datetime2独有的时间 SELECT dt AS unique_datetime FROM table_datetime2 WHERE NOT EXISTS ( SELECT 1 FROM table_datetime1 WHERE table_datetime1.dt = table_datetime2.dt );
方案二:用LEFT JOIN + IS NULL + UNION筛选
通过左连接匹配两张表的时间,筛选出匹配失败的记录,同样能得到目标结果:
-- 从table_datetime1筛选独有的记录 SELECT t1.dt AS unique_datetime FROM table_datetime1 t1 LEFT JOIN table_datetime2 t2 ON t1.dt = t2.dt WHERE t2.dt IS NULL UNION -- 从table_datetime2筛选独有的记录 SELECT t2.dt AS unique_datetime FROM table_datetime2 t2 LEFT JOIN table_datetime1 t1 ON t2.dt = t1.dt WHERE t1.dt IS NULL;
小提示
- 两个方案都会返回你需要的两条记录:
2018-03-01 00:25:00和2018-03-01 00:30:00 - 这里用
UNION而不是UNION ALL,是因为它会自动去重(虽然当前场景不会有重复,但保持这个习惯能避免后续出现意外重复) - 注意替换代码里的
dt为你实际的时间字段名哦
内容的提问来源于stack exchange,提问作者user8717594
相关产品推荐
相关产品推荐

