我正在尝试运行查询,但在某些时候我的逻辑是错误的,我在查找为什么不删除/选择正确的数据时遇到了问题。
我需要问的问题是:
如何删除重复resource_type=2
FROM user_address
并保留原始resource_type=2
。
我创建了以下查询。 问题当我测试我的最终查询并检查其中一些结果时,其中一些没有重复的resource_type=2
,这不应该存在。我无法在查询中找到逻辑问题。
有人能发现问题吗?
此Query
为我提供了602
结果在尝试查找有重复项的人时。因此,我的602 user_address
是独一无二的
SELECT MIN(id)
FROM user_address
WHERE resource_type=2
GROUP BY member_num
HAVING COUNT(resource_type) > 1
如果我执行以下查询,我会得到7420
结果
SELECT count(*)
FROM user_address
WHERE resource_type=2
当我执行选择查询以检查要删除的内容时,我得到6,818
结果
SELECT * FROM user_address
WHERE id NOT IN
(select * from
(SELECT MIN(id)
FROM user_address
WHERE resource_type=2
GROUP BY member_num
HAVING COUNT(resource_type) > 1
) as t) AND resource_type <> 1 AND resource_type <> 3 AND resource_type <> 4
答案 0 :(得分:0)
这些都是有道理的。
根据您的定义(在多行上resource_type = 2
),您有602个重复的值。
您有7,420个行,其中包含resource_type = 2
。
您有6,818行符合最终查询中的任何条件。 602 + 6,818 = 7,420可能是巧合。
我认为您想要的查询更像是:
delete ua from user_addresses ua join
(SELECT MIN(id) as minid, member_num
FROM user_address
WHERE resource_type=2
GROUP BY member_num
HAVING COUNT(resource_type) > 1
) tokeep
on ua.member_num = tokeep.member_num and
ua.id > tokeep.minid;
我不知道最终select
查询中的附加条件是什么。
答案 1 :(得分:0)