2015-02-10 99 views
2
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。首先,我想找到符合某些條件的每種組合。比方說,爲了簡單起見,找到每個三是在數據庫中超過一次(GROUP BY和已經在我的更復雜的現實情況下需要):sqlite選擇所有行中的某些列在可能值集

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

但是,這給了我一個錯誤,我想只是一列被允許在WHERE子句中的SQLite。所以可能需要使用某種連接,但是我需要正確使用連接的語法和類型。如何進行?謝謝。

+0

該表是否是單列主鍵? – 2015-02-10 14:53:24

+0

沒有指定主鍵,可能只是一些自動ID可以使用 – Martin 2015-02-10 18:31:18

回答

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

完美,偉大的作品!非常感謝你! – Martin 2015-02-11 10:22:00

相關問題