Sql 处理重复的字段值

Sql 处理重复的字段值,sql,sqlite,duplicates,Sql,Sqlite,Duplicates,我正在使用SQLite 3.11。我创建了一个表,如下所示: CREATE TABLE MyTable (F1 INTEGER, F2 INTEGER); 然后添加以下记录: INSERT INTO MyTable (F1, F2) Values (1, 2); INSERT INTO MyTable (F1, F2) Values (1, 3); INSERT INTO MyTable (F1, F2) Values (2, 4); INSERT INTO MyTable (F1, F2)

我正在使用SQLite 3.11。我创建了一个表,如下所示:

CREATE TABLE MyTable (F1 INTEGER, F2 INTEGER);
然后添加以下记录:

INSERT INTO MyTable (F1, F2) Values (1, 2); 
INSERT INTO MyTable (F1, F2) Values (1, 3);
INSERT INTO MyTable (F1, F2) Values (2, 4);
INSERT INTO MyTable (F1, F2) Values (2, 5);
INSERT INTO MyTable (F1, F2) Values (3, 6);
INSERT INTO MyTable (F1, F2) Values (3, 7);
INSERT INTO MyTable (F1, F2) Values (4, 2);
现在,如果两条记录具有相同的F1值,那么我将它们定义为冲突记录

现在,我需要执行以下任务:

  • 对于所有冲突记录,获取不同F1值的总计数。在上面的示例中,记录1、2、3、4、5、6是冲突记录,但不同的值仅为1、2、3,因此总计数应为3
  • 获取冲突记录的总数。在上面的示例中,它应该是6
  • 将冲突记录的F2值设置为9。保持所有其他记录的完整性

  • 怎么做?任务2和3是否可以在一个SQL查询中实现以提高性能?

    要搜索冲突,请按F1分组,并查看具有多个onw行的组

    不同值的计数仅为此类组的数量:

    SELECT COUNT(*)
    FROM (SELECT F1
          FROM MyTable
          GROUP BY F1
          HAVING COUNT(*) > 1);
    
    (注意:两个
    计数(*)
    计数不同的事物。)

    冲突记录数是表中具有该
    F1
    值的行数:

    SELECT COUNT(*)
    FROM MyTable
    WHERE F1 IN (SELECT F1
                 FROM MyTable
                 GROUP BY F1
                 HAVING COUNT(*) > 1);
    
    更新它们使用相同的机制:

    UPDATE MyTable
    SET F2 = 9
    WHERE F1 IN (SELECT F1
                 FROM MyTable
                 GROUP BY F1
                 HAVING COUNT(*) > 1);
    

    使用一个查询是不可能的,而且无论如何也不会提高性能。

    非常感谢您的精彩回答!