数据表
| SUPPLIER_ID | COM_ID | SUPPLIER_NAME | OWNER_ID |
|---|---|---|---|
| 1092002 | 1002001 | 上海飞科 | 3 |
| 1092003 | 1002001 | 上海飞科 | 3 |
| 9824001 | 28005 | 绍兴11 | 2 |
| 9824002 | 28005 | 绍兴11 | 2 |
| 9824003 | 28005 | 绍兴11 | 2 |
| 9824004 | 28006 | 绍兴12 | 2 |
1.查询重复记录(COM_ID,SUPPLIER_NAME,OWNER_ID)
SELECT
*
FROM
supplier_info
WHERE
(
COM_ID,
owner_id,
SUPPLIER_NAME
) IN (
SELECT
COM_ID,
owner_id,
SUPPLIER_NAME
FROM
supplier_info
GROUP BY
COM_ID,
owner_id,
SUPPLIER_NAME
HAVING
count(1) > 1
)
结果
| SUPPLIER_ID | COM_ID | SUPPLIER_NAME | OWNER_ID |
|---|---|---|---|
| 1092002 | 1002001 | 上海飞科 | 3 |
| 1092003 | 1002001 | 上海飞科 | 3 |
| 9824001 | 28005 | 绍兴11 | 2 |
| 9824002 | 28005 | 绍兴11 | 2 |
| 9824003 | 28005 | 绍兴11 | 2 |
2.删除重复记录(保留一条)
- 思路:先查询出要删除的记录id,然后删除。
- 查找需要删除的记录,重复记录里面id不在group_by里面的
SELECT
*
FROM
supplier_info
WHERE
(
COM_ID,
owner_id,
SUPPLIER_NAME
) IN (
SELECT
COM_ID,
owner_id,
SUPPLIER_NAME
FROM
supplier_info
GROUP BY
COM_ID,
owner_id,
SUPPLIER_NAME
HAVING
count(1) > 1
)
AND SUPPLIER_ID NOT IN (
SELECT
SUPPLIER_ID
FROM
supplier_info
GROUP BY
COM_ID,
owner_id,
SUPPLIER_NAME
HAVING
count(1) > 1
)
结果
| SUPPLIER_ID | COM_ID | SUPPLIER_NAME | OWNER_ID |
|---|---|---|---|
| 1092003 | 1002001 | 上海飞科 | 3 |
| 9824002 | 28005 | 绍兴11 | 2 |
| 9824003 | 28005 | 绍兴11 | 2 |
- 删除这些id的数据
DELETE
FROM
supplier_info
WHERE
supplier_id IN (
SELECT
SUPPLIER_ID
FROM
supplier_info
WHERE
(
COM_ID,
owner_id,
SUPPLIER_NAME
) IN (
SELECT
COM_ID,
owner_id,
SUPPLIER_NAME
FROM
supplier_info
GROUP BY
COM_ID,
owner_id,
SUPPLIER_NAME
HAVING
count(1) > 1
)
AND SUPPLIER_ID NOT IN (
SELECT
SUPPLIER_ID
FROM
supplier_info
GROUP BY
COM_ID,
owner_id,
SUPPLIER_NAME
HAVING
count(1) > 1
)
)
结果
查找原因发现是因为mysql不能用查询出来的数据去更新,解决方式将查询嵌套一层
DELETE
FROM
supplier_info
WHERE
supplier_id IN (
SELECT
supplier_id
FROM
(
SELECT
SUPPLIER_ID
FROM
supplier_info
WHERE
(
COM_ID,
owner_id,
SUPPLIER_NAME
) IN (
SELECT
COM_ID,
owner_id,
SUPPLIER_NAME
FROM
supplier_info
GROUP BY
COM_ID,
owner_id,
SUPPLIER_NAME
HAVING
count(1) > 1
)
AND SUPPLIER_ID NOT IN (
SELECT
SUPPLIER_ID
FROM
supplier_info
GROUP BY
COM_ID,
owner_id,
SUPPLIER_NAME
HAVING
count(1) > 1
)
) a
)
删除成功结果
| SUPPLIER_ID | COM_ID | SUPPLIER_NAME | OWNER_ID |
|---|---|---|---|
| 1092002 | 1002001 | 上海飞科 | 3 |
| 9824001 | 28005 | 绍兴11 | 2 |
| 9824004 | 28006 | 绍兴12 | 2 |