반응형
SQLite의 "존재하지 않으면 삽입"문
SQLite 데이터베이스가 있습니다. 행에 이전에 둘 다 존재하지 않는 경우에만 table에 값 ( users_id
, lessoninfo_id
) 을 삽입하려고합니다 bookmarks
.
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+")))
다음과 같은 오류가 발생합니다.
구문 근처의 db 오류.
당신이 두 개의 열이있는 테이블라는 메모가있는 경우 id
그리고 text
당신은 다음과 같이 할 수 있어야한다 :
INSERT INTO memos(id,text)
SELECT 5, 'text to insert'
WHERE NOT EXISTS(SELECT 1 FROM memos WHERE id = 5 AND text = 'text to insert');
레코드 text
에 '삽입 할 텍스트'와 id
같고 5 와 같은 행이 이미 포함되어 있으면 삽입 작업이 무시됩니다.
이것이 귀하의 특정 쿼리에 효과가 있는지는 모르겠지만 진행 방법에 대한 힌트를 줄 수 있습니다.
대신 @CLs answer
아래 설명과 같이 중복이 허용되지 않도록 테이블을 디자인하는 것이 좋습니다 .
중복을 원하지 않으면이를 테이블 제약 조건으로 선언해야합니다.
CREATE TABLE bookmarks(
users_id INTEGER,
lessoninfo_id INTEGER,
UNIQUE(users_id, lessoninfo_id)
);
(두 열의 기본 키는 동일한 효과를 갖습니다.)
그런 다음 이러한 제한 조건을 위반하는 레코드 를 자동으로 무시 하고 싶다고 데이터베이스에 알릴 수 있습니다 .
INSERT OR IGNORE INTO bookmarks(users_id, lessoninfo_id) VALUES(123, 456)
고유 한 열의 경우 다음을 사용하십시오.
INSERT OR REPLACE INTO table () values();
자세한 정보는 sqlite.org/lang_insert를 참조하십시오.
insert into bookmarks (users_id, lessoninfo_id)
select 1, 167
EXCEPT
select user_id, lessoninfo_id
from bookmarks
where user_id=1
and lessoninfo_id=167;
이것이 가장 빠른 방법입니다.
다른 SQL 엔진의 경우 1 레코드를 포함하는 더미 테이블을 사용할 수 있습니다. 예 :
select 1, 167 from ONE_RECORD_DUMMY_TABLE
참고 URL : https://stackoverflow.com/questions/19337029/insert-if-not-exists-statement-in-sqlite
반응형
'Programming' 카테고리의 다른 글
하스켈에 대한 소란은 무엇입니까? (0) | 2020.08.04 |
---|---|
iOSStatusBarStyle PreferredStatusBarStyle이 iOS 7에서 작동하지 않습니다 (0) | 2020.08.04 |
Xcode 10b5-중복 심볼 링커 오류, Crashlytics로 컴파일 할 수 없음 (0) | 2020.08.04 |
SVN 암호화 비밀번호 저장소 (0) | 2020.08.04 |
181783497276652981 및 8682522807148012는 무작위로 무엇입니까 (Java 7)? (0) | 2020.08.04 |