当前位置: 首页 > backend >正文

SQL 筛选出在表1但不在表2中的数据

SQL 筛选出在表1但不在表2中的数据

在SQL中,要筛选出存在于表1但不存在于表2中的数据,有几种常见的方法:

方法1:使用LEFT JOIN + WHERE IS NULL

SELECT t1.*
FROM table1 t1
LEFT JOIN table2 t2 ON t1.join_key = t2.join_key
WHERE t2.join_key IS NULL;

这种方法通过左连接表1和表2,然后筛选出表2中连接键为NULL的记录,这些记录就是表1中存在但表2中不存在的。

方法2:使用NOT EXISTS

SELECT t1.*
FROM table1 t1
WHERE NOT EXISTS (SELECT 1 FROM table2 t2 WHERE t1.join_key = t2.join_key
);

这种方法使用子查询检查表2中是否存在匹配记录,性能通常较好。

方法3:使用NOT IN

SELECT t1.*
FROM table1 t1
WHERE t1.join_key NOT IN (SELECT t2.join_key FROM table2 t2
);

注意:如果表2中的join_key可能有NULL值,这种方法可能不会返回预期结果。

性能考虑

  • 对于大数据集,方法2(NOT EXISTS)通常性能最好
  • 确保连接键上有适当的索引
  • 不同数据库系统可能对这些方法的优化程度不同

示例

假设有两个表:employees(员工表)和managers(经理表),想找出非经理的员工:

-- 方法1
SELECT e.*
FROM employees e
LEFT JOIN managers m ON e.employee_id = m.employee_id
WHERE m.employee_id IS NULL;-- 方法2
SELECT e.*
FROM employees e
WHERE NOT EXISTS (SELECT 1 FROM managers m WHERE e.employee_id = m.employee_id
);
http://www.xdnf.cn/news/10836.html

相关文章:

  • 消费者行为变革下开源AI智能名片与链动2+1模式S2B2C商城小程序的协同创新路径
  • 大模型:从基座构建到应用落地--预训练与后训练及个人解析-2025.6
  • 【原神 × 二分查找】找出圣遗物强化到暴击的最小尝试次数!
  • vLLM:让大语言模型推理更高效的新一代引擎 —— 原理详解一
  • String 学习总结
  • WPS 利用 宏 脚本拆分 Excel 多行文本到多行
  • 数据可视化有哪些步骤?2025高效落地指南
  • 机器学习与深度学习08-随机森林02
  • 记我的第一个深度学习模型尝试——MNIST手写数字识别
  • 可视化大屏工具对比:GoView、DataRoom、积木JimuBI、Metabase、DataEase、Apache Superset 与 Grafana
  • 使用Redis作为缓存优化ElasticSearch读写性能
  • 各个主要目录的功能 / Linux 常见指令
  • 车载软件架构 --- 软件定义汽车开发模式思考
  • RagFlow优化代码解析
  • 完美解决在pycharm中创建Django项目安装mysqlclient报错的问题(windows下)
  • Read View在MVCC里如何工作
  • 【Pandas】pandas DataFrame rename
  • Spring中@Controller和@RestControlle注解的区别
  • leetcode hot100刷题日记——37.三数之和
  • 光伏功率预测新突破:TCN-ECANet-GRU混合模型详解与复现
  • 网络安全运维实训室建设方案
  • Tauri(2.5.1)+Leptos(0.7.8)开发桌面应用--简单的工作进度管理
  • 攻防世界RE-1000Click
  • 深入理解 JSX:React 的核心语法
  • Java中并发修改异常如何处理
  • (四)动手实现多层感知机:深度学习中的非线性建模实战
  • 操作系统:生态思政
  • 系统设计面试利器:The System Design Primer开源项目介绍
  • 嵌入式系统:从技术原理到未来趋势(驱动程序篇)
  • SQL Indexes(索引)