选择使用SQLite重复列组合的记录

选择使用SQLite重复列组合的记录,sqlite,Sqlite,我有一个包含以下列的表: a|b|c|d|e 我想选择所有的记录,这样一个列子集的组合就会被重复(比如,a,b,c)。例如: a|b|c|d|e 1|2|3|1|2 6|7|8|9|1 1|2|3|4|5 1|2|2|5|4 应导致: 1|2|3|1|2 1|2|3|4|5 这可以做到: SELECT a,b,c,d,e FROM t t1 WHERE EXISTS ( SELECT NULL FROM t t2

我有一个包含以下列的表:

a|b|c|d|e
我想选择所有的记录,这样一个列子集的组合就会被重复(比如,a,b,c)。例如:

a|b|c|d|e
1|2|3|1|2
6|7|8|9|1
1|2|3|4|5
1|2|2|5|4
应导致:

1|2|3|1|2
1|2|3|4|5
这可以做到:

SELECT a,b,c,d,e
  FROM t t1
 WHERE EXISTS ( SELECT NULL
                  FROM t t2
                 WHERE t1.a = t2.a AND t1.b = t2.b AND t1.c = t2.c
                   AND t1.rowid <> t2.rowid
              )
第三种方式:

SELECT a,b,c,d,e
  FROM ( SELECT a,b,c
           FROM t
          GROUP BY a,b,c
         HAVING COUNT(*) > 1
       )
NATURAL JOIN t

最后一个有一个优点,您还可以添加聚合行(就像您在其他RDBMS中使用分析函数一样:)

这与Oracle中的类似:

   WITH x AS
      (SELECT a,b,c,d,e,COUNT(*) OVER (PARTITION BY a,b,c) "Rows in this group"
         FROM t
      )
   SELECT * FROM x WHERE "Rows in this group" >= 2
这可以做到:

SELECT a,b,c,d,e
  FROM t t1
 WHERE EXISTS ( SELECT NULL
                  FROM t t2
                 WHERE t1.a = t2.a AND t1.b = t2.b AND t1.c = t2.c
                   AND t1.rowid <> t2.rowid
              )
第三种方式:

SELECT a,b,c,d,e
  FROM ( SELECT a,b,c
           FROM t
          GROUP BY a,b,c
         HAVING COUNT(*) > 1
       )
NATURAL JOIN t

最后一个有一个优点,您还可以添加聚合行(就像您在其他RDBMS中使用分析函数一样:)

这与Oracle中的类似:

   WITH x AS
      (SELECT a,b,c,d,e,COUNT(*) OVER (PARTITION BY a,b,c) "Rows in this group"
         FROM t
      )
   SELECT * FROM x WHERE "Rows in this group" >= 2

非常感谢您的明确和翔实的答复,非常感谢!非常感谢您的明确和翔实的答复,非常感谢!