【发布时间】:2011-09-30 16:50:28
【问题描述】:
我正在使用此查询根据两个字段查找重复项:
SELECT
last_name,
first_name,
middle_initial,
COUNT(last_name) AS Duplicates,
IF(rec_id = '', 1, 0) AS has_REC_ID
FROM files
GROUP BY last_name, first_name
HAVING COUNT(last_name) > 1 AND COUNT(first_name) > 1;
好的,这将返回一组包含名字、姓氏和中间名的行,一个名为“Duplicates”的列包含很多 2,以及一个名为 has_REC_ID 的列包含混合的 1 和 0。
最终,我要做的是找到哪些行匹配名字和姓氏 - 然后对于每一对,找到具有 ('') 作为 rec_id 值的行,分配从具有 rec_id 的记录中获取 rec_id 值,然后删除首先具有 rec_id 的记录。
所以对于初学者来说,我会创建一个新列并执行以下操作:
UPDATE files a
SET a.has_dup --new column
= if(a.last_name IN (
SELECT b.last_name
FROM files b
GROUP BY b.last_name
HAVING COUNT(b.last_name) > 1
)
, 1, null);
但是 MySQL 返回:“You can't specify target table 'a' for update in from 子句”
我敢打赌,没有什么比我在这里尝试的方法更荒谬了。有人可以帮我弄清楚那是什么吗?
更新:我也试过了:
UPDATE files a
SET a.has_dup = 1
WHERE a.last_name IN (
SELECT b.last_name
FROM files b
GROUP BY b.last_name
HAVING COUNT(b.last_name) > 1
);
...并得到相同的错误消息。
【问题讨论】:
标签: mysql duplicates