Mam bazę danych SQLite. Próbuję wstawić wartości ( users_id
, lessoninfo_id
) do tabeli bookmarks
, tylko jeśli obie nie istnieją wcześniej w wierszu.
INSERT INTO bookmarks(users_id,lessoninfo_id)
VALUES(
(SELECT _id FROM Users WHERE User='"+$('#user_lesson').html()+"'),
(SELECT _id FROM lessoninfo
WHERE Lesson="+lesson_no+" AND cast(starttime AS int)="+Math.floor(result_set.rows.item(markerCount-1).starttime)+")
WHERE NOT EXISTS (
SELECT users_id,lessoninfo_id from bookmarks
WHERE users_id=(SELECT _id FROM Users
WHERE User='"+$('#user_lesson').html()+"') AND lessoninfo_id=(
SELECT _id FROM lessoninfo
WHERE Lesson="+lesson_no+")))
To daje błąd mówiąc:
błąd db w pobliżu składni gdzie.
źródło
person (id, name unique)
icat (person_id, name unique)
chcę wstawić dużo par(person_name, cat_name)
?ON CONFLICT IGNORE
doCREATE TABLE
byłoby trochę bardziej przydatneW przypadku unikalnej kolumny użyj tego:
Aby uzyskać więcej informacji, zobacz: sqlite.org/lang_insert
źródło
Unique(col1,col2)
i masz również col3, ponieważ wstawianie lub ignorowanie nie powiedzie się, gdy to zaktualizuje col3 do nowej wartości.insert or replace into my_table values('1','2','5')
zastępuje rząd'1','2','3'
To najszybszy sposób.
W przypadku niektórych innych silników SQL można użyć tabeli Dummy zawierającej 1 rekord. na przykład:
źródło