You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用SQL基于图书名称和版本查询两个数据表的差异

高效查询两表图书版本差异的SQL方案

针对你需要对比Table1和Table2中图书B5077的版本差异,并且要求比全连接更快的需求,这里推荐使用EXCEPT结合UNION ALL的集合运算方案,具体SQL如下:

-- 找出Table1有但Table2没有的(Name, version)组合
(SELECT name, version FROM table1 WHERE name = 'B5077')
EXCEPT
(SELECT name, version FROM table2 WHERE name = 'B5077')

UNION ALL

-- 找出Table2有但Table1没有的(Name, version)组合
(SELECT name, version FROM table2 WHERE name = 'B5077')
EXCEPT
(SELECT name, version FROM table1 WHERE name = 'B5077')

为什么这个方案比全连接更快?

  • 集合运算的特性:EXCEPT会直接计算两个结果集的差集,内部优化逻辑通常比全连接(FULL OUTER JOIN)更高效,尤其是当你只关心存在差异的记录时,不需要处理全连接产生的大量匹配/不匹配的中间行。
  • 自动去重:EXCEPT默认会对结果去重,所以即使Table1中有重复的(B5077, A)记录,也只会返回一条差异,符合你找“差异数据”的需求。
  • 索引友好:如果你的table1和table2在name和version字段上建立了联合索引,这个查询可以直接利用索引快速过滤和比对,进一步提升效率。

结果说明

执行上述SQL后,你会得到以下差异记录:

  • 来自Table1的差异:(B5077, A)
  • 来自Table2的差异:(B5077, D)、(B5077, E)

内容的提问来源于stack exchange,提问作者kenp

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:30:22