sqlite选择所有行,其中某些列是可能值的集合

时间:2015-02-10 13:09:02

标签: sqlite

col0 col1 col2 A B C
0    0    1    1 2 3
0    1    1    1 2 3
0    0    1    1 2 3
0    2    0    1 2 3 
0    1    1    1 2 3

您好,我有一个表,其中一些列是col0,col1,col2。首先,我想找到符合某些条件的每种组合。让我们简单地说,在数据库中找到不止一次的每个三元组(在我更复杂的实例中需要分组和拥有):

SELECT col0,col1,col2 FROM table GROUP BY col0,col1,col2 HAVING COUNT(*) > 1

给我一​​些:

col0 col1 col2
0    0    1
0    1    1

现在我想选择(实际删除)所有包含col0,col1,col2组合之一的行。

类似于:

SELECT * FROM table WHERE (col0,col1,col2) IN (...select above...)

但是这给了我一个错误,我想SQLite中的WHERE子句只允许一列。所以可能必须使用某种连接,但我很难使用正确的语法和类型的连接。如何进行?谢谢。

1 个答案:

答案 0 :(得分:2)

选择具有某些值组合的行的最简单方法是使用连接:

SELECT MyTable.*
FROM MyTable
JOIN (SELECT col0, col1, col2
      FROM MyTable
      GROUP BY col0, col1, col2
      HAVING COUNT(*) > 1)
USING (col1, col2, col3)

联接不能与DELETE一起使用,因此您必须在单独的步骤中使用主键(或候选主键):

DELETE FROM MyTable
WHERE rowid IN (SELECT MyTable.rowid
                FROM MyTable
                JOIN (SELECT col0, col1, col2
                      FROM MyTable
                      GROUP BY col0, col1, col2
                      HAVING COUNT(*) > 1)
                USING (col1, col2, col3))