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

相关推荐
多敲代码防脱发2 分钟前
导出导入Excel文件(详解-基于EasyExcel)
java·开发语言·jvm·数据库·mysql·excel
数据库幼崽26 分钟前
MySQL 8.0 OCP 1Z0-908 51-60题
数据库·mysql·ocp
Asus.Blogs36 分钟前
为什么 import _ “github.com/go-sql-driver/mysql“ 要导入但不使用?_ 是什么意思?
sql·golang·github
我叫珂蛋儿吖41 分钟前
[redis进阶六]详解redis作为缓存&&分布式锁
运维·c语言·数据库·c++·redis·分布式·缓存
小L爱科研1 小时前
4.7/Q1,GBD数据库最新文章解读
数据库·机器学习·数据分析·回归·健康医疗
GUIQU.1 小时前
【MySQL】函数
数据库·mysql
chennalC#c.h.JA Ptho1 小时前
kubuntu系统详解
linux·数据库·经验分享·postgresql·系统安全
DavieLau2 小时前
Python开发后端InfluxDB数据库测试接口
服务器·数据库·python·时序数据库
悟能不能悟2 小时前
关于 javax.validation.constraints的详细说明
数据库·mysql