同结构SQL表对比:查询仅存在于单表的指定字段唯一行
满足需求的SQL查询方案
以下提供三种不同适用场景的写法,返回结果均符合你的预期:
写法1:支持EXCEPT/MINUS语法的数据库(PostgreSQL、SQL Server、Oracle等适用)
EXCEPT 会直接返回左查询存在、右查询不存在的去重结果,语法最简洁:
SELECT Employee, Dateinoffice FROM console EXCEPT SELECT Employee, Dateinoffice FROM flow;
Oracle数据库需要把EXCEPT替换为MINUS,效果完全一致
写法2:全数据库兼容的LEFT JOIN写法(含MySQL等不支持EXCEPT的数据库)
通过左连接匹配两表相同行,筛选无匹配结果的行即可:
SELECT c.Employee, c.Dateinoffice FROM console c LEFT JOIN flow f ON c.Employee = f.Employee AND c.Dateinoffice = f.Dateinoffice WHERE f.Employee IS NULL;
写法3:全数据库兼容的NOT EXISTS写法
逻辑更直观,性能和LEFT JOIN基本持平:
SELECT Employee, Dateinoffice FROM console c WHERE NOT EXISTS ( SELECT 1 FROM flow f WHERE f.Employee = c.Employee AND f.Dateinoffice = c.Dateinoffice );
结果验证
针对你给出的样例数据,执行上述任意查询,都会返回唯一符合要求的结果:
| Employee | Dateinoffice |
|---|---|
| Rob | 16/09/2021 |
内容的提问来源于stack exchange,提问作者Ardian
相关产品推荐
相关产品推荐

