SQLite는 if not exist와 유사한 기능을 구현합니다.
if not exists(select * from ErrorConfig where Type='RetryWaitSeconds')
begin
  insert into ErrorConfig(Type,Value1)
  values('RetryWaitSeconds','3')
end
insert into ErrorConfig(Type,Value1)
select 'RetryWaitSeconds','3'
where not exists(select * from ErrorConfig where Type='RetryWaitSeconds')보충: sqlite3에서 NOT IN 안 좋은 문제
sqlite3로 SQL을 익힐 때 헤아릴 수 없는 문제를 만났고 구글에서도 답을 찾지 못했다.마지막으로'우회'방식으로 공교롭게 이 문제를 해결했지만 원리가 무엇인지 당분간 알 수 없고 현재 정력이 한계가 있기 때문에 잠시 기록해 두고 계속 연구해야 한다.
데이터베이스는 다음과 같습니다.
CREATE TABLE book (
 id integer primary key,
 title text,
 unique(title)
);
CREATE TABLE checkout_item (
 member_id integer,
 book_id integer,
 movie_id integer,
 unique(member_id, book_id, movie_id) on conflict replace,
 unique(book_id),
 unique(movie_id)
);
CREATE TABLE member (
 id integer primary key,
 name text,
 unique(name)
);
CREATE TABLE movie (
 id integer primary key,
 title text,
 unique(title)
);질문1: 어떤 회원이 아직 대출 기록을 보지 않았습니까?
SQL 문장(SQL1)은 다음과 같습니다.
SELECT * FROM member WHERE id NOT IN(SELECT member_id FROM checkout_item);문2: 어떤 책이 대출되지 않았습니까?
이것은 이전과 유사해 보이기 때문에 나는 당연히 다음과 같은 SQL 문장(SQL2)을 실행했다.
SELECT * FROM book WHERE id NOT IN(SELECT book_id FROM checkout_item);
SELECT * FROM book WHERE id IN(SELECT book_id FROM checkout_item);이어 구글은 해결책을 찾지 못했다.그런데 왜 member는 되고 책은 안 돼요?그것들은 이전에 무엇이 달라졌습니까?자세히 살펴보니 checkout_item의 book_id와 movie_id에 유니크가 추가되었고member_id는 없습니다.그렇게 지도 모른다, 아마, 아마...id 필요 없어요. 타이틀을 바꿔보세요.
SELECT * FROM book WHERE 
 title NOT IN( 
 SELECT title FROM book WHERE id IN(
 SELECT book_id FROM checkout_item));문제 원인: NULL을 건드리지 않으면
사실은, 내 자신의 해결 방안은 공교롭게work에 불과하고, 이 문제는 유니크와 관계가 없다.구 준도는'SELECT book_id FROM checkout_item'결과에 null 값이 포함되어 NOT도 null로 되돌아갔다는 설명이다.회원이 영화만 빌리고 책을 빌리지 않았을 때 발생하는 checkout_item에서 book_id는 비어 있습니다.
솔루션은 checkout_ 선택item의 book_id 시,null 값을 book_id 제거:
SELECT * FROM book WHERE id NOT IN(SELECT book_id FROM checkout_item WHERE book_id IS NOT NULL);총결산
내가 이 문제를 해결할 때 방향이 틀렸으니 디버깅 프로그램처럼 중간 결과를 검사해야 한다.예를 들어, 다음 문장을 실행하면 빈 줄이 포함됩니다.
SELECT book_id FROM checkout_item
SELECT member_id FROM checkout_item이상의 개인적인 경험으로 여러분께 참고가 되었으면 좋겠습니다. 또한 많은 응원 부탁드립니다.만약 잘못이 있거나 완전한 부분을 고려하지 않으신다면 아낌없이 가르침을 주시기 바랍니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
SQLite 데이터베이스 설치 및 기본 운영 설명서대부분의 경우 - SQLite의 바이너리 파일이 존재하는지 확인하면 데이터베이스를 만들고 연결하며 사용할 수 있다.내장형 데이터베이스 항목이나 솔루션을 찾고 있다면 SQLite는 매우 고려할 만합니다. SQLite ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.