这个是一个mysql的查询规则:不能先select出同一表中的某些值,再update或者delete这个表(在同一语句中)
例如:删除某一个字段重复的值保留id最小的那个
vin字段值一样的就删除,留其中id最小的值
先查询出来看看
select * from mes_sync a where vin in(select vin from mes_sync GROUP BY vin HAVING count(vin)>1)
这个意思就是 在mes_sync表中 vin字段值出现重复的列都列举出来
删除的时候 注意:
如果写成下面会报错 You can't specify target table 'mes_sync' for update in FROM clause
DELETE
FROM
mes_sync
WHERE
vin IN (
SELECT
vin
FROM
mes_sync
GROUP BY
vin
HAVING
COUNT(vin) > 1
)
AND id NOT IN (
SELECT
id
FROM
mes_sync
GROUP BY
vin
HAVING
COUNT(vin) > 1
)
正确的为:
DELETE
FROM
mes_sync
WHERE
vin IN (
SELECT
a.vin
FROM
(
SELECT
vin
FROM
mes_sync
GROUP BY
vin
HAVING
COUNT(vin) > 1
) a
)
AND id NOT IN (
SELECT
MIN(b.id)
FROM
(
SELECT
id
FROM
mes_sync
GROUP BY
vin
HAVING
COUNT(vin) > 1
) b
)