2014-06-12 42 views
0

我創建了一個包含2個主鍵的表,當我試圖一次刪除很少的記錄,但整個表都被擦除了。這是我嘗試的代碼,我不確定它爲什麼這樣做。 任何幫助將是最受歡迎的。執行2個主鍵上的刪除時出現SQLite錯誤

BEGIN TRANSACTION; 
DROP TABLE NAMES1; 
/* Create a table called NAMES1 */ 
CREATE TABLE NAMES1(Id integer, Id2 integer, Name text,PRIMARY KEY(Id,Id2)); 

/* Create few records in this table */ 
INSERT INTO NAMES1 VALUES(1,1,'Tom'); 
INSERT INTO NAMES1 VALUES(2,1,'Lucy'); 
INSERT INTO NAMES1 VALUES(3,4,'Frank'); 
INSERT INTO NAMES1 VALUES(4,1,'Jane'); 
INSERT INTO NAMES1 VALUES(5,6,'Robert'); 
COMMIT; 

/* Display all the records from the table */ 

SELECT Count(*) FROM NAMES1; /* Returns 5 */ 
DELETE FROM NAMES1 WHERE (Id AND Id2) in ((2 AND 2),(1 AND 1),(2 AND 1)); 
SELECT Count(*) FROM NAMES1; /* Returns 0 */ 

通過我的計算返回的數應該是3而不是0

回答

0

SQLite中,你不能將多個值與一個表達式進行比較。

刪除多個記錄,最簡單的方法是通過一個做一個:

BEGIN; 
DELETE FROM Names1 WHERE Id = 2 AND Id2 = 2; 
DELETE FROM Names1 WHERE Id = 1 AND Id2 = 1; 
DELETE FROM Names1 WHERE Id = 2 AND Id2 = 1; 
COMMIT; 

另外,編寫明確檢查所有三個組合條件:

DELETE FROM Names1 
WHERE (Id = 2 AND Id2 = 2) 
    OR (Id = 1 AND Id2 = 1) 
    OR (Id = 2 AND Id2 = 1); 
-1

行:

DELETE FROM NAMES1 WHERE (Id AND Id2) in ((2 AND 2),(1 AND 1),(2 AND 1)); 

等同於:

DELETE FROM NAMES1 WHERE 1 in ((1,1,1); 

並刪除整個表

改變爲:

DELETE FROM NAMES1 WHERE Id in (2,1) AND Id2 in (2,1); 
+0

這也不管用;它也會刪除鍵「2,1」。 –

+0

我的意思是「1,2」。 –