SQL Server两张表日期列比较,筛选表A有但表B无更晚日期的数据
解决方案
你要筛选表A中不存在同TOOLS值且日期更晚的表B记录的条目,优先推荐使用NOT EXISTS写法,兼容性更高,也能避免NOT IN碰到NULL值返回异常的问题。
可用查询语句
SELECT A.TOOLS, A.DATE FROM A WHERE NOT EXISTS ( SELECT 1 FROM B WHERE B.TOOLS = A.TOOLS AND B.DATE > A.DATE )
逻辑说明
- 子查询会逐行匹配表A当前记录的
TOOLS值,查找表B中同TOOLS且日期晚于当前A记录的条目 - 只要子查询匹配不到符合条件的B表记录,当前A表的这条记录就符合你的筛选要求
- 如果你只需要返回去重的
TOOLS字段,把查询第一行改成SELECT DISTINCT A.TOOLS即可
原NOT IN写法调整(不推荐)
如果要基于你现有的NOT IN语句修改,写法如下,注意该写法在B表TOOLS字段存在NULL值时会返回空结果:
SELECT TOOLS FROM A WHERE (TOOLS, DATE) NOT IN ( SELECT TOOLS, MAX(DATE) FROM B GROUP BY TOOLS )
内容的提问来源于stack exchange,提问作者Amenay Khial
相关产品推荐
相关产品推荐

