[sqlite] SQLite에서 테이블을 조인하는 동안 어떻게 업데이트합니까?

나는 시도했다 :

UPDATE closure JOIN item ON ( item_id = id ) 
SET checked = 0 
WHERE ancestor_id = 1

과:

UPDATE closure, item
SET checked = 0
WHERE ancestor_id = 1 AND item_id = id

둘 다 MySQL에서 작동하지만 SQLite에서 구문 오류가 발생합니다.

이 업데이트 / 조인이 SQLite 버전 3.5.9에서 작동하도록하려면 어떻게해야합니까?



답변

당신은 할 수 없습니다. SQLite 는 UPDATE 문에서 JOIN을 지원하지 않습니다 .

그러나 대신 하위 쿼리를 사용하여이 작업을 수행 할 수 있습니다.

UPDATE closure SET checked = 0
WHERE item_id IN (SELECT id FROM item WHERE ancestor_id = 1);

또는 그런 것; 스키마가 정확히 무엇인지 명확하지 않습니다.


답변

REPLACE 를 사용할 수도 있고 조인과 함께 선택을 사용할 수도 있습니다. 이렇게 :

REPLACE INTO clusure
 SELECT sel.col1,sel.col2,....,sel.checked --checked should correspond to column that you want to change
FROM (
 SELECT *,0 as checked FROM closure LEFT JOIN item ON (item_id = id)
 WHERE ancestor_id = 1) sel


답변