常用SQL

# 将已开启组装物料的SPU下的商品类型改为组合商品
UPDATE `tb_stock5` set `stock_type` = 4  where `spu_id` IN (SELECT `id` FROM `tb_spu5` WHERE `is_assemble` = 1);

# 将A表的purchase_code字段值 更新 为B表的code字段值
UPDATE `ysf_stock`.`tb_shelves_over_stock2` AS a JOIN `ysf_purchase`.`tb_purchase2` AS b ON a.`purchase_id` = b.`id`
SET a.`purchase_code` = b.`code`;

UPDATE ysf_purchase.tb_purchase_plan_stock1 AS a INNER JOIN ysf_stock.tb_stock1 AS b ON a.stock_id = b.id
SET a.stock_type = b.stock_type;

# 联表更新
UPDATE 
    tb_xxxxx AS a, tb_xxxxx AS b
SET
    a.xxxxx = 0,
    a.yyyyy =0
WHERE a.xx = b.xx AND a.yy = b.yy                    
    AND a.company_id = ?
    AND b.label_id IN (?)


# 增加表索引
ALTER TABLE ysf_amazon.tb_replenishment_task ADD INDEX idx_4(`shop_id`,`replenishment_recommend_quantity`);

# 增加表字段
ALTER TABLE tableName ADD COLUMN column;

# 批量增加表字段
ALTER TABLE tableName
ADD COLUMN column1,
ADD COLUMN column2,
ADD COLUMN column3;

# 修改表字段
ALTER TABLE tableName MODIFY COLUMN column;

# 删除某个表的字段
ALTER TABLE tableName DROP columnName;

# 删除某个表多个字段
ALTER TABLE tableName
DROP COLUMN column1,
DROP COLUMN column2,
DROP COLUMN column3;

# 根据供应商的下单类型,修复采购单的下单类型
UPDATE ysf_purchase.`tb_purchase2` 
SET `order_type` = 2
WHERE
`supplier_id` IN ( SELECT `id` FROM ysf_product.`tb_supplier` WHERE `order_type` = 2 );


# 查询某字段存储多个值,例如:sex字段存储了"11,21,33"
WHERE FIND_IN_SET( 11, purchase_plan_id ) OR FIND_IN_SET( 21, purchase_plan_id ) OR FIND_IN_SET( 33, purchase_plan_id )

# 增加某企业推送赛盒的账号
INSERT INTO `sys_base`.`tb_company_erp_api` (`company_id`, `api`, `api_name`, `oauth2client_id`, `creator`, `updater`) VALUES (?, 'allot_in', '调拨入库', ?, '?', '?');

# 查询到货量大于等于采购量的采购单编号
SELECT 
    p5.id,
    p5.company_id,
    p5.purchase_quantity,
    SUM(ps5.arrival_quantity) AS total_arrival_quantity
FROM 
    tb_purchase5 p5
JOIN 
    tb_purchase_stock5 ps5 ON p5.id = ps5.purchase_id
WHERE
p5.company_id = 100011 AND p5.status = 1
GROUP BY 
    ps5.purchase_id
HAVING 
    SUM(ps5.arrival_quantity) >= p5.purchase_quantity;



# 将采购单已完结,收货单未完结的收货单,作废掉
UPDATE tb_receipt5 SET status = 4 where id IN (
    SELECT * from (
        select receipt_id from ysf_purchase.tb_receipt_purchase_stock5 AS a 
        LEFT JOIN ysf_purchase.tb_receipt5 AS b ON a.receipt_id = b.id
        LEFT JOIN ysf_purchase.tb_purchase5 AS c ON a.purchase_id = c.id
        WHERE a.company_id = 100011 and c.status = 3 and b.status in (1,2)
        GROUP BY a.receipt_id
    ) AS a
);

# 将质检单的良品,次品量,同步到采购单商品中
UPDATE ysf_purchase.tb_purchase_stock AS A 
left JOIN ( select * from (
    SELECT a.stock_id, b.purchase_id, SUM(a.good_quality) AS good_quality, SUM(a.defective_quality) AS defective_quality
    FROM ysf_purchase.tb_signfor_receipt_warehouse_stock AS a
    LEFT JOIN ysf_purchase.tb_signfor_receipt_warehouse AS b
    ON a.receipt_warehouse_id = b.id
    GROUP BY a.stock_id, b.purchase_id ) AS C
) AS B on A.stock_id = B.stock_id and A.purchase_id = B.purchase_id
SET A.good_quantity = B.good_quality, A.defective_quantity = B.defective_quality
where B.good_quality is not null and B.defective_quality is not null;

# 获取【收货商品表上架量】 与 【上架单上架量】不一致的数据
select 
a.shelves_quantity AS a_shelves_quantity,
a.stock_id,
a.stock_code,
a.create_time,
a.company_id,
b.code AS receipt_code,
d.quantity
from ysf_purchase.tb_receipt_stock2 AS a
left join ysf_purchase.tb_receipt2 as b on a.receipt_id = b.id
left join (
    select * from (
        select stock_id,arrival_code,SUM(quantity) AS quantity from ysf_stock.tb_shelves_over_stock2
        GROUP BY stock_id, arrival_code
    ) AS c
) AS d on d.stock_id = a.stock_id and d.arrival_code = b.code
where d.quantity is not null and a.shelves_quantity != d.quantity

# 上架单上架量,同步到收货商品表
UPDATE ysf_purchase.tb_receipt_stock6 AS a
left join ysf_purchase.tb_receipt6 as b on a.receipt_id = b.id
left join (
    select * from (
        select stock_id,arrival_code,SUM(quantity) AS quantity from ysf_stock.tb_shelves_over_stock6 
        GROUP BY stock_id, arrival_code
    ) AS c
) AS d on d.stock_id = a.stock_id and d.arrival_code = b.code
SET a.shelves_quantity = d.quantity
where d.quantity is not null and a.shelves_quantity != d.quantity

# 获取【收货商品表良品量、次品量】 与 【质检单良品量、次品量】不一致的数据
select 
A.good_quality AS a_good_quality,
A.defective_quality AS a_defective_quality,
A.stock_id,
A.stock_code,
A.create_time,
B.code AS receipt_code,
C.good_quality AS f_good_quality,
C.defective_quality AS f_defective_quality
from ysf_purchase.tb_receipt_stock2 AS A
left join ysf_purchase.tb_receipt2 AS B on A.receipt_id = B.id
left join (
    select * from (
        select c.stock_id, d.arrival_code, c.status, SUM(c.good_quality) AS good_quality, SUM(c.defective_quality) AS defective_quality 
        from ysf_purchase.tb_signfor_receipt_warehouse_stock2 as c
        left join ysf_purchase.tb_signfor_receipt_warehouse2 as d on c.receipt_warehouse_id = d.id
        where c.status = 3 and d.type = 1
        GROUP BY stock_id, arrival_code
    ) AS e
) AS C on C.stock_id = A.stock_id and C.arrival_code = B.code
where A.good_quality != C.good_quality OR A.defective_quality != C.defective_quality;

# 【质检单良品量、次品量】同步到【收货商品表良品量、次品量】
update ysf_purchase.tb_receipt_stock6 AS A
left join ysf_purchase.tb_receipt6 AS B on A.receipt_id = B.id
left join (
    select * from (
        select c.stock_id, d.arrival_code, c.status, SUM(c.good_quality) AS good_quality, SUM(c.defective_quality) AS defective_quality 
        from ysf_purchase.tb_signfor_receipt_warehouse_stock6 as c
        left join ysf_purchase.tb_signfor_receipt_warehouse6 as d on c.receipt_warehouse_id = d.id
        where c.status = 3 and d.type = 1
        GROUP BY stock_id, arrival_code
    ) AS e
) AS C on C.stock_id = A.stock_id and C.arrival_code = B.code
SET A.good_quality = C.good_quality, A.defective_quality = C.defective_quality
where (A.good_quality != C.good_quality OR A.defective_quality != C.defective_quality);

# 更新采购商品签收量
update ysf_purchase.tb_purchase_stock2  as a,
 (
    select a.stock_id,a.purchase_id,sum(a.actual_received_quantity) as actual_received_quantity  from ysf_purchase.tb_receipt_purchase_stock2 as a
    left join ysf_purchase.tb_receipt2 as b on a.receipt_id=b.id 
    where a.company_id=100002
    and b.status not in (4,6,7)
    and b.type = 1
    group by a.purchase_id,a.stock_id
) as b 

set a.signfor_quantity=b.actual_received_quantity
where a.company_id=100002 
and a.purchase_id=b.purchase_id and a.stock_id=b.stock_id;

# 修复采购主表签收量
UPDATE ysf_purchase.tb_purchase AS a
left join (
    select * from (
        select purchase_id,SUM(signfor_quantity) AS signfor_quantity from ysf_purchase.tb_purchase_stock
        GROUP BY purchase_id
    ) AS b
) AS c on c.purchase_id = a.id
SET a.signfor_quantity = c.signfor_quantity
where a.signfor_quantity != c.signfor_quantity

# 修复采购商品表上架量
UPDATE ysf_purchase.tb_purchase_stock AS a
left join (
    select * from (
        select purchase_id,SUM(quantity) AS shelves_quantity,stock_id from ysf_stock.tb_shelves_over_stock
        GROUP BY purchase_id,stock_id
    ) AS b
) AS c on a.purchase_id = c.purchase_id and a.stock_id = c.stock_id
SET a.shelves_quantity = c.shelves_quantity
where a.shelves_quantity != c.shelves_quantity and c.shelves_quantity is not null

# 修复收货单商品表的spu_id、spu_code
UPDATE ysf_purchase.tb_receipt_stock7 AS a INNER JOIN ysf_stock.tb_stock7 AS b ON a.stock_id = b.id
SET a.spu_id = b.spu_id where a.company_id = 100227 and a.receipt_id = 4719;

UPDATE ysf_purchase.tb_receipt_stock7 AS a INNER JOIN ysf_stock.tb_spu7 AS b ON a.spu_id = b.id
SET a.spu_code = b.spu_code where a.company_id = 100227 and a.receipt_id = 4719;


# 查询商品包含部分属性,且只包含选中的属性
SELECT stock_id,attribute_value_id,attribute_type
FROM ysf_stock.tb_stock_attribute6
WHERE attribute_value_id IN (809,775,778)
GROUP BY stock_id
HAVING COUNT(DISTINCT attribute_value_id) = 3;

# 通过店仓库存表,创建不存在的店铺数据
INSERT INTO sys_base.tb_shop (id, account_name, company_id)
    SELECT a.shop_id,CONCAT('店铺',a.shop_id),a.company_id FROM ysf_stock.tb_reserved_inventory2 as a
    LEFT JOIN sys_base.tb_shop as b ON a.shop_id = b.id
    WHERE a.company_id = 100003 AND b.account_name IS NULL GROUP BY a.shop_id

# 检索重复数据
SELECT company_id, stock_id, warehouse_id, COUNT(*)
FROM tb_warehouse_position_stock5_copy129240914
GROUP BY company_id, stock_id, warehouse_id
HAVING COUNT(*) > 1;

# 嵌套子查询
select id, stock_code, stock_name from tb_stock5 where id in (
    select stock_id from (
        SELECT company_id, stock_id, warehouse_id, COUNT(*)
        FROM tb_warehouse_position_stock5_copy129240914
        GROUP BY company_id, stock_id, warehouse_id
        HAVING COUNT(*) > 1) as c);

# 查询多仓位总库存与主表总库存不一致的数据
select a.stock_id,a.warehouse_id,a.quantity,c.quantity_sum from tb_warehouse_stock6 as a
LEFT JOIN (
    select * from 
        (
            select stock_id,warehouse_id,SUM(quantity) AS quantity_sum from tb_warehouse_position_stock6 GROUP BY stock_id,warehouse_id
        ) as b
) as c on a.stock_id = c.stock_id and a.warehouse_id = c.warehouse_id
    where a.quantity != c.quantity_sum 
    LIMIT 10;

# 修复流水记录的仓位信息
UPDATE ysf_log.tb_warehouse_stock_record5 as A
LEFT JOIN ysf_stock.tb_warehouse_stock5 AS B ON A.stock_id = B.stock_id and A.warehouse_id = B.warehouse_id
SET A.position_code = B.position_code
WHERE A.company_id = 100011 and A.position_code = '1';


# 根据仓库 + 商品编号分组,获取仓位(多个仓位合为一个)
SELECT stock_id,warehouse_id,GROUP_CONCAT(position_code) 
FROM tb_warehouse_position_stock6
WHERE warehouse_id IN () and stock_id IN () 
GROUP BY warehouse_id,stock_id;

# 取每个商品最新的一条数据
$stockSettlementPrice = ReceiptStockModel::query($this->tbNum)->where('company_id', $this->companyId)->whereIn('stock_id', $stockIdArr)->select('id','stock_id','settlement_price','create_time')->orderBy('create_time', 'desc')->get()->unique('stock_id')->values();

# 获取收货单类型与采购单不一致的数据
select a.company_id,a.code,a.type,a.source_type,a.status,c.code,c.type AS purchase_type from tb_receipt0 as a
LEFT JOIN tb_receipt_purchase_stock0 as b on b.receipt_id = a.id
LEFT JOIN tb_purchase0 as c on b.purchase_id = c.id
WHERE a.type = 4 and c.type = 1
GROUP BY a.code;

# 修复收货单类型与采购单不一致的数据
update tb_receipt1 set type = 1 where id in (select * from (select a.id AS purchase_type from tb_receipt1 as a
LEFT JOIN tb_receipt_purchase_stock1 as b on b.receipt_id = a.id
LEFT JOIN tb_purchase1 as c on b.purchase_id = c.id
WHERE a.type = 4 and c.type = 1
GROUP BY a.code) as B);

# 退货单维度,导出数据(返工看板)
SELECT 
C.code AS '采购单号',
C.purchase_creator AS '采购员',
E.supplier_code AS '供应商代码',
A.stock_code AS 'SKU',
C.remark AS '描述',
C.purchase_quantity AS '采购量',
C.shelves_quantity AS '已上架量',
A.quantity AS '返工量',
(CASE WHEN B.return_type = 1 THEN '退款退货' ELSE '退货补货' END) AS '返工类型',
F.name AS '返工原因',
B.create_time AS '返工时间',
J.claimant_name AS '质检员',
(CASE 
    WHEN B.return_method = 1 THEN '物流退货'
    WHEN B.return_method = 2 THEN '上门取货'
    ELSE '其他' END
) AS '寄回方式',
G.warehouse_name AS '本地仓库',
-- B.creator AS '仓储员',
K.nickname AS '仓储员',
B.return_code AS '返工单号',
I.`receive_time` AS '回货签收时间',
I.`signfor_quantity` AS '签收数量',
I.`shelves_quantity` AS '入库数量',
I.`shelves_over_time` AS '入库时间',
I.remark AS '备注'
FROM ysf_purchase.tb_return_order_sku5 AS A
LEFT JOIN ysf_purchase.tb_return_order5 AS B ON A.return_id = B.id
LEFT JOIN (
        SELECT C1.purchase_id,C1.stock_id,C1.stock_code,C1.remark,C1.purchase_quantity,C1.shelves_quantity,
        C2.code,C2.creator,C3.nickname AS purchase_creator
        FROM ysf_purchase.tb_purchase_stock5 AS C1 
        LEFT JOIN ysf_purchase.tb_purchase5 AS C2 ON C1.purchase_id = C2.id
        INNER JOIN sys_base.tb_user AS C3 ON C2.creator = C3.id
) AS C ON C.purchase_id = B.purchase_id AND C.stock_id = A.stock_id
LEFT JOIN ysf_product.tb_supplier AS E ON B.supplier_id = E.id
LEFT JOIN sys_base.tb_label AS F ON B.return_reason = F.id
LEFT JOIN sys_base.tb_warehouse AS G ON B.warehouse_id = G.id
LEFT JOIN ysf_purchase.tb_purchase5 AS H ON H.`relevancy_code` = B.return_code
LEFT JOIN ysf_purchase.tb_purchase_stock5 AS I ON I.purchase_id = H.id AND I.stock_id = A.stock_id
LEFT JOIN (
        SELECT J1.code, J1.return_order_id, J1.claimant, J2.nickname AS claimant_name
        FROM tb_signfor_receipt_warehouse5 AS J1
        INNER JOIN sys_base.tb_user AS J2 ON J1.claimant = J2.id
) AS J ON J.return_order_id = A.return_id
INNER JOIN sys_base.tb_user AS K ON B.creator = K.id

WHERE B.return_code = 'RC202410090019';


# 检测收货单签收完,上架完,但收货单还处于待收货
ALTER TABLE tb_receipt2 ADD COLUMN `temp_shelves` int(11) DEFAULT '0' COMMENT '实际上架量(临时)';

SELECT A.temp_shelves,B.shelves_quantity
FROM ysf_purchase.tb_receipt2 AS A 
left JOIN ( select * from (
    SELECT receipt_id, SUM(shelves_quantity) AS shelves_quantity
    FROM ysf_purchase.tb_receipt_stock2
    GROUP BY receipt_id ) AS C
) AS B on A.id = B.receipt_id 
WHERE company_id = 100002;

UPDATE ysf_purchase.tb_receipt2 AS A 
left JOIN ( select * from (
    SELECT receipt_id, SUM(shelves_quantity) AS shelves_quantity
    FROM ysf_purchase.tb_receipt_stock2
    GROUP BY receipt_id ) AS C
) AS B on A.id = B.receipt_id
SET A.temp_shelves = B.shelves_quantity
WHERE company_id = 100002;

# 对比Json字段内的数据
SELECT * FROM tb_signfor_receipt_warehouse5
WHERE claimant !=0 and claimant != JSON_EXTRACT(abnormal_report_info, '$.user_id');


发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

Powered By Z-BlogPHP 1.5.2 Zero

 Theme By 优美尚品

Copyright Your WebSite.Some Rights Reserved.