문제

"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);
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top