SQLITE 업데이트 필드가 포함 된 경우
문제
"67/797/124/"또는 "45/"와 같은 데이터를 포함하는 "widget_ids"라는 데이터베이스 필드가 주어지면 숫자가 슬래시 분리 된 위젯 _ids입니다 ... ID X가있는 행의 widget_ids에 텍스트 "somenumber/"아무것도하지 말고, 그렇지 않으면 "sommenumber/"가 현재 값에 부여하십시오. "
SQL, 또는 더 구체적으로 SQLITE로 그런 일을 할 수 있습니까? 어떤 이유로 프로그램에서 더 잘 수행되는 일입니까, 아니면 SQL의 구문과 같은 "if-then"에 대한 지원이 있습니까?
해결책
업데이트는 if-thens 자체와 비슷하며 대부분의 SQL 구현에서도 어떤 종류의 지원이 있습니다. 간단한 솔루션은 다음과 같습니다.
update <tablename>
set widget_id = widget_id + "somenumber/"
where row_id = X
and widget_id not like "%/somenumber/%"
and widget_id not like "somenumber/%";
다른 팁
먼저, 상징적으로 구분 된 목록을 제거하십시오. 행당 하나의 위젯 ID와 함께 다른 테이블을 사용하십시오.
CREATE TABLE ThingieWidgets (
thingie_id INT REFERENCES Thingies,
widget_id INT REFERENCES Widgets,
PRIMARY KEY(thingie_id, widget_id)
);
슬래시로 분리 된 목록의 값으로 테이블을 채우십시오.
INSERT INTO ThingieWidgets (thingie_id, widget_id)
VALUES (1234, 67), (1234, 797), (1234, 124);
이제 Thingie 1234 참조 위젯 45인지 테스트 할 수 있습니다.
SELECT * FROM ThingieWidgets
WHERE thingie_id = 1234 AND widget_id = 45;
중복 키 오류가 있으면 삽입하고 복구 할 수 있습니다.
INSERT INTO ThingieWidgets (thingie_id, widget_id)
VALUES (1234, 45);
제휴하지 않습니다 StackOverflow