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