mysql 并集、交集、差集

创建两个表

复制代码
 
CREATE TABLE `object_a` (
 
`id` bigint(20) NOT NULL AUTO_INCREMENT,
 
`oname` varchar(50) DEFAULT NULL,
 
`odesc` varchar(50) DEFAULT NULL,
 
`create_time` datetime DEFAULT NULL,
 
PRIMARY KEY (`id`)
 
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1
复制代码

添加数据

复制代码
CREATE TABLE `object_b` (
 
`id` bigint(20) NOT NULL AUTO_INCREMENT,
 
`oname` varchar(50) DEFAULT NULL,
 
`odesc` varchar(50) DEFAULT NULL,
 
`create_time` datetime DEFAULT NULL,
 
PRIMARY KEY (`id`)
 
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=latin1
复制代码

添加数据

查询并集(union all)

SELECT oname,odesc FROM object_a
 
UNION ALL
 
SELECT oname,odesc FROM object_b

结果如下

查询并集(union)

SELECT oname,odesc FROM object_a
 
UNION
 
SELECT oname,odesc FROM object_b

结果如下


PS:union自带去重

查询交集

SELECT a.oname,a.odesc FROM object_a a INNER JOIN object_b b ON a.oname=b.oname AND a.odesc=b.odesc

等价于

SELECT a.oname,a.odesc FROM object_a a INNER JOIN object_b b USING(oname,odesc)

结果如下

 


PS:别的数据库可以试试这种写法

SELECT oname,odesc FROM object_a
 
INTERSECT
 
SELECT oname,odesc FROM object_b

查询差集

复制代码
SELECT a.oname, a.odesc
 
FROM
 
object_a a
 
LEFT JOIN object_b b
 
ON a.oname = b.oname
 
AND a.odesc = b.odesc
 
WHERE b.id IS NULL
复制代码

结果如下

PS:别的数据库可以试试这种写法

SELECT a.oname, a.odesc FROM object_a a
 
MINUS
 
SELECT b.oname, b.odesc FROM object_b b

 

posted @   一个人的孤独自白  阅读(1230)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示