mysql 行行比较
CREATE TABLE `t_ware_sale_statistics` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键id', `business_id` bigint(20) NOT NULL COMMENT '业务机构编码', `ware_inside_code` bigint(20) NOT NULL COMMENT '商品自编码', `create_user` bigint(20) DEFAULT NULL COMMENT '创建人', `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `modify_user` bigint(20) DEFAULT NULL COMMENT '最终修改人', `modify_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最终修改时间', `is_delete` tinyint(2) DEFAULT '2' COMMENT '是否删除,1:是,2:否', PRIMARY KEY (`id`) USING BTREE, KEY `idx_business_ware` (`business_id`,`ware_inside_code`) USING BTREE ) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='商品销售统计'; INSERT INTO `demo`.`t_ware_sale_statistics` (`id`, `business_id`, `ware_inside_code`, `create_user`, `create_time`, `modify_user`, `modify_time`, `is_delete`) VALUES ('1', '1', '10', NULL, '2021-08-25 14:49:14', NULL, '2021-08-25 14:54:59', '2'); INSERT INTO `demo`.`t_ware_sale_statistics` (`id`, `business_id`, `ware_inside_code`, `create_user`, `create_time`, `modify_user`, `modify_time`, `is_delete`) VALUES ('2', '1', '20', NULL, '2021-08-25 14:49:33', NULL, '2021-08-25 14:54:59', '2'); INSERT INTO `demo`.`t_ware_sale_statistics` (`id`, `business_id`, `ware_inside_code`, `create_user`, `create_time`, `modify_user`, `modify_time`, `is_delete`) VALUES ('3', '1', '30', NULL, '2021-08-25 14:49:38', NULL, '2021-08-25 14:55:00', '2'); INSERT INTO `demo`.`t_ware_sale_statistics` (`id`, `business_id`, `ware_inside_code`, `create_user`, `create_time`, `modify_user`, `modify_time`, `is_delete`) VALUES ('4', '2', '10', NULL, '2021-08-25 14:49:42', NULL, '2021-08-25 14:55:01', '2'); INSERT INTO `demo`.`t_ware_sale_statistics` (`id`, `business_id`, `ware_inside_code`, `create_user`, `create_time`, `modify_user`, `modify_time`, `is_delete`) VALUES ('5', '2', '20', NULL, '2021-08-25 14:49:53', NULL, '2021-08-25 14:55:01', '2'); INSERT INTO `demo`.`t_ware_sale_statistics` (`id`, `business_id`, `ware_inside_code`, `create_user`, `create_time`, `modify_user`, `modify_time`, `is_delete`) VALUES ('6', '3', '10', NULL, '2021-08-25 14:49:57', NULL, '2021-08-25 14:55:02', '2'); INSERT INTO `demo`.`t_ware_sale_statistics` (`id`, `business_id`, `ware_inside_code`, `create_user`, `create_time`, `modify_user`, `modify_time`, `is_delete`) VALUES ('7', '3', '40', NULL, '2021-08-25 14:50:06', NULL, '2021-08-25 14:55:03', '2');
问题就是:如何查询业务机构1下,10,20商品 和 业务机构2下,10,30商品
方式一:union all
-- explain SELECT * FROM `t_ware_sale_statistics` where business_id = 1 and ware_inside_code in (10,20) union all SELECT * FROM `t_ware_sale_statistics` where business_id = 2 and ware_inside_code in (10,30)
方式二:or拼接
-- explain SELECT * FROM `t_ware_sale_statistics` where (business_id = 1 and ware_inside_code in (10,20)) or (business_id = 2 and ware_inside_code in (10,30))
方式三:混查过滤
-- explain SELECT * FROM `t_ware_sale_statistics` where business_id in (1,2) and ware_inside_code in (10,20,30)
但是:查出来的结果集大于等于我们想要的结果集,所以还需要对查出来的结果集进行一次过滤,过滤出我们想要的结果集
方式四:行行比较
SQL-92 中加入了行与行比较的功能,这样一来,比较谓词 = 、< 、> 和 IN 谓词的参数就不再只是标量值了,还可以是值列表了
-- explain SELECT * FROM `t_ware_sale_statistics` where (business_id,ware_inside_code) in ((1,10),(1,20),(2,10),(2,30));
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
2018-08-25 如何修改hosts文件