求解下面的SQL题目,之前没学过SQL,自己做了不知道对不对,希望哪位前辈可以给一下解答
(1) 本次测试运行在MySQL5.5上,用到的表结构如下(SQL形式):
CREATE TABLE 'goods' (
'goods_code' char(32) NOT NULL COMMENT '商品编码 ',
'goods_name' varchar(100) DEFAULT NULL COMMENT '商品名',
PRIMARY KEY ('goods_code')
) COMMENT='商品';
CREATE TABLE `stock_io` (
`io_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
`location_code` char(32) NOT NULL COMMENT '库位编码',
`goods_code` char(32) NOT NULL COMMENT '商品编码',
`pack_bcode` char(32) NOT NULL COMMENT '包裹条形码',
`inout_flg` tinyint(4) NOT NULL COMMENT '1:入库 -1:出库',
`qty` decimal(18,4) DEFAULT '0.0000' COMMENT '数量',
`qty_unit` char(32) DEFAULT NULL COMMENT '数量单位',
`update_time` bigint(20) DEFAULT NULL COMMENT '更新时间(UTC毫秒)',
PRIMARY KEY (`io_id`),
KEY `IDX1` (`location_code`,`goods_code`,`pack_bcode`,`inout_flg`),
KEY `IDX2` (`update_time`)
) COMMENT='出入库';
CREATE TABLE 'stock_location' (
'location_code' char(32) NOT NULL COMMENT '库位编号',
'location_name' varchar(100) DEFAULT NULL COMMENT '库位名称',
PRIMARY KEY ('location_code')
) COMMENT='库位';
CREATE TABLE `stock_status` (
`location_code` char(32) NOT NULL COMMENT '库位编码',
`goods_code` char(32) NOT NULL COMMENT '商品编码',
`pack_bcode` char(32) NOT NULL COMMENT '包裹条形码',
`qty` decimal(18,4) DEFAULT '0.0000' COMMENT '数量',
`qty_unit` char(32) DEFAULT NULL COMMENT '数量单位',
`update_time` bigint(20) DEFAULT NULL COMMENT '更新时间(UTC毫秒)',
PRIMARY KEY (`location_code`,`goods_code`,`pack_bcode`),
KEY `IDX1` (`update_time`)
) COMMENT='库存';
(2) 表之间的关系
本次测试的数据表是简化后的仓库管理系统中的入出库记录和库存状态。数据查询的主要目标是 stock_io, stock_status。
stock_io为出入库记录,其主键io_id为顺序番号,每一条记录代表了某商品的1个包裹入库的记录。在实际的业务场景中,通常某一车商品入库时,有多种商品,每种商品有多个包裹,然后1个大的库位里可以堆放多个包裹。
stock_status为库存状态,其主键('location_code','goods_code','pack_bcode')意味以1个库位中的1个包裹为单位记录数量。可以理解为该表的数据来源于出入库的操作,或是库存盘点时的数量调整。
(3) 本题要求
1条SQL查询出符合如下条件的数据:
a. stock_io中,2013年1月入库总数量最少的10种商品。排序顺序为数量,商品编码,都是升序。
b. 对应的各自当前的库存状态(stock_status)中的数量。
c. 对应的各自的商品名称。
d. 输出的字段(select段中的字段),显示名称没有要求,字段顺序为 商品编码,商品名称,1月入库数量,库存状态(stock_status)中的数量。
注意:长期的日常运营下,系统错误或是人为原因,stock_io查询所得的记录未必在stock_status、goods中存在对应的记录,即以stock_io为主表即可。