记录一个sql:查询商品码对应多个商品的商品码

目录

背景

一个项目中,商品表和商品码表是一对多的关系,但由于程序没有控制好,导致有些商品码对应有多个商品,为了修正数据,我们得把商品码对应多个商品的商品码找出来.

sql 语句

goods_detail表结构

sql 复制代码
CREATE TABLE `goods_detail` (
  `id` bigint(20) NOT NULL COMMENT '主键',
  `goods_id` bigint(20) NOT NULL COMMENT '商品id',
  `bar_code` varchar(20) DEFAULT NULL COMMENT '商品码',
  `library_status` int(1) NOT NULL DEFAULT '1' COMMENT '在库状态 1-在库 2-离库',
  `out_type` int(1) NOT NULL DEFAULT '3' COMMENT '离库类型 3-未离库 4-出库 5-调拨(出的时候标记)',
  `goods_status` int(1) NOT NULL DEFAULT '4' COMMENT '是否可用 3-不可用 4-可用'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='商品明细表';

查询商品码对应多个商品的商品码的sql

sql 复制代码
SELECT
	d.bar_code AS 商品码,
	count( DISTINCT d.goods_id ) AS 商品数
FROM
	goods_detail d 
WHERE
	d.library_status = 1 
	AND d.out_type = 3 
	AND d.goods_status = 4 
	AND d.bar_code IS NOT NULL
	AND d.bar_code != ''
	AND d.bar_code != '0'
	AND d.bar_code != '无'
GROUP BY
	d.bar_code
	HAVING 商品数 > 1;

查询结果

验证sql

sql 复制代码
SELECT
	 d.id,d.goods_id,d.bar_code
FROM
	air_goods_detail d 
WHERE
	d.library_status = 1 
	AND d.out_type = 3 
	AND d.goods_status = 4 
	AND d.bar_code = '202312181250';

随机挑一个商品码查询,果然对应两个不同的商品,sql查询正确。

总结

在上述 sql统计查询中,先按商品码分组,再去重商品id记数(count( DISTINCT d.goods_id )),最后通过HAVING 把统计结果进行过虑,得到最终想要的商品码。

相关推荐
zzc9211 分钟前
MATLAB仿真生成无线通信网络拓扑推理数据集
开发语言·网络·数据库·人工智能·python·深度学习·matlab
未来之窗软件服务23 分钟前
JAVASCRIPT 前端数据库-V1--仙盟数据库架构-—-—仙盟创梦IDE
数据库·数据库架构·仙盟创梦ide·东方仙盟数据库
LjQ204031 分钟前
网络爬虫一课一得
开发语言·数据库·python·网络爬虫
烙印60135 分钟前
MyBatis原理剖析(二)
java·数据库·mybatis
RestCloud36 分钟前
如何通过ETLCloud实现跨系统数据同步?
数据库·数据仓库·mysql·etl·数据处理·数据同步·集成平台
你是狒狒吗38 分钟前
TM中,return new TransactionManagerImpl(raf, fc);为什么返回是new了一个新的实例
java·开发语言·数据库
程序员岳焱1 小时前
Java 与 MySQL 性能优化:MySQL 慢 SQL 诊断与分析方法详解
后端·sql·mysql
Channing Lewis2 小时前
sql server如何创建表导入excel的数据
数据库·oracle·excel
秃头摸鱼侠2 小时前
MySQL安装与配置
数据库·mysql·adb
UGOTNOSHOT2 小时前
每日八股文6.3
数据库·sql