j’ai un petit problème d’update d’une table sous SQL server, l’expliquer n’étant pas évident l’ai pris un extrait de la table.
Dans ce cas je souhaiterais mettre à jour le champs TSK_LINKEDTASKID avec la valeur du TSK_TASKID ou la valeur du OLD_TSK_TASKID est égale à OLD_TSK_LINKEDTSKID (de la ligne à mettre à jour).
Dans l’exemple suivant je veux mettre à jour TSK_LINKEDTASKID de la première ligne avec la valeur de TSK_TASKID de la seconde ligne car la valeur OLD_TSK_LINKEDTASKID de la première ligne est égale à la valeur OLD_TSK_TASKID de la seconde ligne. C’est assez clair?
Les couple tsk_taskid, old_tsk_taskid sont unique (à une unique valeur de tsk_taskid une autre unique valeur de old_tsk_taskid est associée).
J’ai essayé (sans être convaincu):
UPDATE igkimp_task_ee
SET tsk_linkedtaskid=(SELECT tsk_taskid FROM igkimp_task_ee AS inp
WHERE old_tsk_linkedtaskid=inp.old_tsk_taskid)
Il est indiqué que toutes lignes sont mises-à-jour mais au final je constate que la colonne TSK_LINKEDTASKID est toujours NULL.
Je te laisse réfléchir sur les raisons de cette syntaxe
UPDATE
NewTask
SET
NewTask.TSK_LINKEDTASKID = OldTask.TSK_TASKID
FROM
igkimp_task_ee AS NewTask JOIN
igkimp_task_ee AS OldTask ON NewTask.OLD_TSK_LINKEDTASKID = OldTask.OLD_TSK_TASKID;
Ouuuu self join Nice!
Je viens juste d’ecrire une query de la mort avec un self join et deux outer left join justement… pfff qu’est ce que j’aime pas SQL hehe…
[quote=« Styx31, post:4, topic: 46690 »]UPDATE
NewTask
SET
NewTask.TSK_LINKEDTASKID = OldTask.TSK_TASKID
FROM
igkimp_task_ee AS NewTask JOIN
igkimp_task_ee AS OldTask ON NewTask.OLD_TSK_LINKEDTASKID = OldTask.OLD_TSK_TASKID;[/quote]j’oublie tout le temps cette syntaxe même si je sais qu’il y en a « une autre » ! Merci !