2011-02-28 5 views
1

난 다음 HQL 질의가 :최대 절전 모드, MySQL의

UPDATE TaskAssessment taskAssessment 
SET taskAssessment.activeFlag = false 
WHERE taskAssessment IN 
(
SELECT taskAssessment2 
FROM TaskAssessment taskAssessment2 
Where taskAssessment2.activeFlag = true 
AND taskAssessment2.patient.id 
AND taskAssessment2.needsLevel.careNeed = :careNeed 
) 

하지만 나에게 오류를 제공합니다 :

You can't specify target table 'TASK_ASSESSMENT' for update in FROM clause 

사람이 MySQL을위한 쿼리를 수정하고 최대 절전 모드 나에게 도움이 될 수 있습니다. 미리 감사드립니다.

+1

참조 http://stackoverflow.com/questions/45494/sql-을 from-update-in-clause- – axtavt

+0

나는 그것을 보았지만 예상치 못한 결과가 나온다. – Ikthiander

+0

@ user582862 : 이미 시도한 것을 게시 할 수 있습니까? ? –

답변

0

You can't specify target table 'TASK_ASSESSMENT' for update in FROM clause를 해결 (이 같은 것을 쓸 필요가 MySQL의에서) IN 대신 JOIN를 사용하는 쿼리를 다시 작성하려면

UPDATE TaskAssessment a 
INNER JOIN TaskAssessment a2 ON (a2.id = a.id) 
SET a.activeFlag = 0 
WHERE a2.active_flag = 1 AND 
a2.patient_id = :patient_id AND a2.needsLevel_careNeed = :careNeed 
+0

시도 : UPDATE TaskAssessment taskAssessment INNER JOIN TaskAssessment taskAssessment2 ON (taskAssessment.id = taskAssessment2.id) SET taskAssessment.activeFlag = false taskAssessment2.activeFlag = true이고 taskAssessment2.patient.id = : patientId 및 taskAssessment2.needsLevel.careNeed = : careNeed – Ikthiander

+0

그리고 그것은 작동하지 않았다. 오류 : "set"을 기대하고, 'INNER'가 발견되었습니다 – Ikthiander

+0

그것은 hql이 아닌 mysql 구문입니다. 작동 시키려면'CreateSQLQuery' +'executeUpdate'를 사용할 필요가 있습니다. hql에서 join + update를 사용할 수 있는지는 잘 모르겠습니다. – a1ex07