sqlite select 某些列在一组可能值中的所有行

sqlite select all rows where some columns are in set of possible values

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

您好,我有一个 table,其中一些列是 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

现在我想select(实际上删除)所有包含这些 col0、col1、col2 组合之一的行。

所以像这样:

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

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

select 具有某些值组合的行的最简单方法是使用联接:

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))