记录一个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 把统计结果进行过虑,得到最终想要的商品码。

相关推荐
闲云自留地12 分钟前
从零造一台 Ubuntu 24.04:虚拟机、装系统、配 IP 到 root 远程登录一篇通
数据库·tcp/ip·ubuntu
Allen-Steven13 分钟前
SQL查询专项:从完整书写到综合判断
运维·服务器·数据库
Navicat中国14 分钟前
SQL 编辑器生产力:重构与实时错误检测
数据库·sql·重构·编辑器·navicat
Data analyse45621 分钟前
App埋点版本兼容的字段迁移校验
大数据·运维·服务器·前端·数据库·数据分析
Data analyse45628 分钟前
Nginx日志访客识别的边界处理
大数据·运维·服务器·数据库·数据分析
IvorySQL30 分钟前
PostgreSQL 日报| PostgreSQL 19 RC1 正式发布(10 月 16 日)
数据库·人工智能·postgresql·开源
下页、再停留36 分钟前
【C#桌面客户端系列学习-10】连接SQLite数据库
数据库·c#·visual studio
CRMEB37 分钟前
商品 SKU 设计,从简单规格到多规格踩过什么
java·前端·数据库·开源
sunshine88541 分钟前
关联交易抵消与内部往来清理:合并报表中的“排雷”策略
大数据·数据库·人工智能
方安乐1 小时前
PostGIS_GCJ02toWGS84_操作文档
数据库·oracle