如何在不查询整个数据库的情况下检查重复条目


How do I check for duplicate entries, without querying the whole database?

我有一个页面,检查是否已提交Meta标签的产品和类别。

它显示在顶部,那些缺失的。但我也需要看看是否有任何复制-因为你不应该真的有两个产品具有相同的标题标签或元描述。

我已经通过提取所有产品标题标签和Meta Desc/Keywords以及它们的标题来做到这一点。但从理论上讲,这比几百个产品需要更多的工作,而我只想找到那些标题标签,Meta Desc或Meta Keywords至少与另一个重复的产品。

我如何做到这一点,而不运行查询找到所有。然后在每一行上,再次查询ALL以检查titletag,然后查询ALL以检查Meta Desc,然后再次查询ALL以检查Keywords。

是否有一个脚本,我可以查询一个产品,并询问这三个字段中的任何一个是否在数据库的其他地方有重复,没有四个查询(三个被嵌入)?

如果您想要排除任何重复的行,一种方法就是按这三个值分组并确保HAVING COUNT(*) = 1。这样做的缺点是,它通常不能以其他方式工作,因为如果按三列分组并且它们重复,则将从另一行任意选择剩余的列。

但是,如果这不是一个风险,并且您只想选择这三个值出现一次的行,您可以尝试:

SELECT *
FROM myTable
GROUP BY col1, col2, col3
HAVING COUNT(*) = 1;

我会把@McAdam331的答案翻倍,稍微修改一下。

如果您需要包含多行(col1,col2,col3) -元组:

 select col1, col2, col3, group_concat(id) as idlist, count(*) as anz
 from mytable 
 group by col1, col2, col3
 having anz > 1

在group_concat(id)中,您将获得所有id作为逗号分隔的列表,如(4,1,19)。

相关文章: