나는 시도했다 :
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