2011-02-28 4 views
1

j'ai la requête HQL suivante:mise en veille prolongée, 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 
) 

mais sa me donner des erreurs:

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

Quelqu'un pourrait-il me aider à corriger la requête pour MySQL et mise en veille prolongée. Merci d'avance.

+1

Voir http://stackoverflow.com/questions/45494/sql- delete-cant-specified-target-table-for-update-in-from-clause – axtavt

+0

Je l'ai vu, mais quand j'essaye de dire qu'il est inattendu (dans la requête! – Ikthiander

+0

@ user582862: Pouvez-vous poster ce que vous avez déjà essayé? ? –

Répondre

0

Pour résoudre You can't specify target table 'TASK_ASSESSMENT' for update in FROM clause, réécrivez la requête à utiliser JOIN au lieu de IN (dans une base MySQL vous devez écrire quelque chose comme ça):

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

a essayé ceci: UPDATE TaskAssessment tâcheAssessment INNER JOIN TaskAssessment tâcheAssessment2 ON (tâcheAssessment.id = tâcheAssessment2.id) SET taskAssessment.activeFlag = false Où taskAssessment2.activeFlag = true ET taskAssessment2.patient.id =: patientId AND taskAssessment2.needsLevel.careNeed =: careNeed – Ikthiander

+0

et cela n'a pas fonctionné. donne une erreur: en attendant "set", trouvé "INNER" – Ikthiander

+0

C'est la syntaxe mysql, pas hql. Pour le faire fonctionner, vous devez utiliser 'CreateSQLQuery' +' executeUpdate'. Je ne suis pas sûr si vous pouvez utiliser join + update in hql. – a1ex07

Questions connexes