나는 각 행에 id
이 자동으로 증가하고 NULL
일 수있는 몇 가지 값을 갖는 sqlite3 DB를 가지고있다. null이있는 꼬리는 (이 세그먼트에서 가장 오래된 null 레코드를 유지하는 것이 가장 이상적입니다.)을 삭제해야합니다. 예를 들어, 여기서 id = 12..16 (이상적으로는 13..16) 행을 삭제하고 싶습니다.sqlite에서 null로 tail을 어떻게 선택합니까?
어떤 생각이 sqlite에서 어떻게 할 수 있습니까?
CREATE TABLE tail (id INTEGER PRIMARY KEY, val TEXT);
INSERT INTO "tail" VALUES(1,'5');
INSERT INTO "tail" VALUES(2,'7');
INSERT INTO "tail" VALUES(3,'100');
INSERT INTO "tail" VALUES(4,'150');
INSERT INTO "tail" VALUES(5,NULL);
INSERT INTO "tail" VALUES(6,NULL);
INSERT INTO "tail" VALUES(7,'120');
INSERT INTO "tail" VALUES(8,'150');
INSERT INTO "tail" VALUES(9,'152');
INSERT INTO "tail" VALUES(10,NULL);
INSERT INTO "tail" VALUES(11,'152');
INSERT INTO "tail" VALUES(12,NULL);
INSERT INTO "tail" VALUES(13,NULL);
INSERT INTO "tail" VALUES(14,NULL);
INSERT INTO "tail" VALUES(15,NULL);
INSERT INTO "tail" VALUES(16,NULL);
나는 두 단계로 쉽게 할 수있는, 뭔가 같은 :
to_delete = []
for row in query("SELECT * FROM tail ORDER BY -id"):
if row.id IS NOT NONE:
break
to_delete.add(row.id)
# optionally: to_delete.remove_last()
query("DELETE FROM tail WHERE id IN (?)", to_delete)
그러나이 트랜잭션에없는, 내가 달성하는 데 사용할 수있는 몇 가지 참신한 트릭이 있다는 느낌이 이 단일 sqlite 문을.
왜 발은 null'이고 단지'꼬리에서 삭제 하시겠습니까? sqlite에 익숙하지 않은 사용자도 있으므로 구문에 도움이되지 않습니다. –
@JacobH 다른 계산을 위해 꼬리의 값을 제외하고 모든 val = NULL이 필요합니다. –