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子句只允许一列。所以可能必须使用某种连接,但我很难使用正确的语法和类型的连接。如何进行?谢谢。
答案 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))