我有一个情况, 我的MySQL表(公司)包含重复的记录,即它有重复的公司,有些记录在大多数列中都有值,有些则没有。所以我想删除具有最少信息集的重复公司。伙计们有什么想法?
Id Company_name column column2 column3 column4
-------------------------------------------------
1 A xyz
2 B pqr abc tcv aaa
3 A bnm xyz ccc
4 A bnm xyz
5 B aaa
我需要按照以下方式获取我的表
Id Company_name column column2 column3 column4
-------------------------------------------------
2 B pqr abc tcv aaa
3 A bnm xyz ccc
答案 0 :(得分:2)
您可以使用php方法执行此操作,并手动检索按列分组的所有记录,以减少重复行。在上述情况下,您正在考虑Company_name
列。但是它可能在其他列上有一些不同的值,但在Company_name列中却没有。这可能会在理解算法如何处理这种类型的行时产生歧义
但是,在插入值之前,必须检查信息,以便不再发生重复,这是一种好的做法。但是,如果您已经拥有此类记录,则以下查询可能有所帮助。
DELETE FROM TABLENAME WHERE (Company_name, column)
NOT IN
(
SELECT Company_name, column FROM
(
SELECT MIN(Id) AS Id, column FROM TABLENAME GROUP BY Company_name
)
X
);
这是为了删除一列的重复值,您可以使用多个查询的组合来减少重复值。
答案 1 :(得分:1)
可以获得每一行的“得分”,并根据该决定作出决定。这是一个快速示例,显示从哪里开始。
SELECT id,
name,
length(concat_ws('', col1, col2, col3, col4)) AS score
FROM company
ORDER BY score DESC;
上查看