【发布时间】:2021-07-26 13:21:27
【问题描述】:
我正在尝试删除具有相同 hid 值的重复记录。
这是小提琴:
https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=86e8ed00cf0a496da490eae5d7aae093
表 product_match_unmatches:
ID hid flag
1 1 1
2 1 1
3 2 1
4 2 1
5 1 2
6 2 2
7 2 2
8 1 1
9 1 1
10 2 1
现在我想从表中删除重复的 hid 但仅用于 flag = 1。
此查询将删除除最近的duplicates 之外的所有duplicates,但与标志值无关:
DELETE pmu1
FROM dmf_product_match_unmatches as pmu1
LEFT JOIN ( SELECT MAX(ID) as ID, hid
FROM dmf_product_match_unmatches as pmu2
GROUP BY hid) pmu3 USING (ID, hid)
WHERE pmu3.ID IS NULL;
我尝试在上述查询中添加 where 子句 flag = 1,但这并没有产生预期的结果。
DELETE pmu1
FROM dmf_product_match_unmatches as pmu1
LEFT JOIN ( SELECT MAX(ID) as ID, hid
FROM dmf_product_match_unmatches as pmu2
where flag = 1
GROUP BY hid
) pmu3 USING (ID, hid)
WHERE pmu3.ID IS NOT NULL;
需要的输出是:
ID hid flag
5 1 2
6 2 2
7 2 2
9 1 1
10 2 1
【问题讨论】: