0

2 つの主キーを持つテーブルを作成し、一度にいくつかのレコードを削除しようとすると、テーブル全体が消去されます。ここに私が試したコードがありますが、なぜそれができるのかわかりません。どんな助けでも大歓迎です。

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 */

私の計算では、返されたカウントは 0 ではなく 3 だったはずです。

4

2 に答える 2

0

SQLite では、複数の値を 1 つの式で比較することはできません。

複数のレコードを削除する最も簡単な方法は、1 つずつ行うことです。

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;

または、3 つの組み合わせすべてを明示的にチェックする条件を記述します。

DELETE FROM Names1
WHERE (Id = 2 AND Id2 = 2)
   OR (Id = 1 AND Id2 = 1)
   OR (Id = 2 AND Id2 = 1);
于 2014-06-12T16:52:57.620 に答える