Files
shanxia2.0/docs/sql/migrations/2026-08-03-crm-contract-no-check-duplicates.sql
T
2026-08-03 12:48:52 +08:00

57 lines
1.5 KiB
SQL

-- 合同编号重复排查(只读,不改数据)
-- 库:shanxia2.0 / crm_contract
-- 用途:检查租户内 contract_no 是否仍有重复(含软删)
SET NAMES utf8mb4;
-- 1) 按 (contract_no, tenant_no) 分组:任何重复(含软删)
SELECT
contract_no,
tenant_no,
COUNT(*) AS cnt,
SUM(CASE WHEN del_flag = 0 THEN 1 ELSE 0 END) AS alive_cnt,
SUM(CASE WHEN del_flag = 1 THEN 1 ELSE 0 END) AS deleted_cnt,
GROUP_CONCAT(
CONCAT(id, '/del', del_flag, '/', IFNULL(customer_name, ''))
ORDER BY del_flag, create_time
SEPARATOR ' | '
) AS detail
FROM crm_contract
GROUP BY contract_no, tenant_no
HAVING COUNT(*) > 1
ORDER BY cnt DESC, contract_no;
-- 2) 仅有效单据 (del_flag=0) 是否撞号
SELECT
contract_no,
tenant_no,
COUNT(*) AS alive_cnt,
GROUP_CONCAT(id ORDER BY create_time SEPARATOR ' | ') AS ids,
GROUP_CONCAT(IFNULL(customer_name, '') ORDER BY create_time SEPARATOR ' | ') AS customers
FROM crm_contract
WHERE del_flag = 0
GROUP BY contract_no, tenant_no
HAVING COUNT(*) > 1
ORDER BY alive_cnt DESC, contract_no;
-- 3) 指定编号示例:SX/X-JT20260803001(含改号后的 ~DEL~ 变体)
SELECT
id,
contract_no,
contract_name,
customer_name,
status,
del_flag,
create_time,
update_time
FROM crm_contract
WHERE tenant_no = 'shanxia2.0'
AND (
contract_no = 'SX/X-JT20260803001'
OR contract_no LIKE 'SX/X-JT20260803001~%'
)
ORDER BY del_flag, create_time;
-- 4) 当前唯一索引是否已是全局唯一版
SHOW INDEX FROM crm_contract WHERE Key_name LIKE 'uk_contract%';