[SQL] (encore) UPDATE avec SELECT

Bonjour,

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? :slight_smile:

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.

Des idées?

J’ai relu 4x ton explication, j’ai toujours rien compris. Tu peux pas nous faire des fleches ? Un dessin ?

Si j’ai bien compris, dans le cas de tes 2 lignes, tu voudrais que la ligne avec TaskId = 2312881 ait LinkedTaskId = 2312883.

Je pensais résoudre simplement ton problème avec cet update là, mais à priori il ne fonctionne pas (et j’ai du mal à piger pourquoi à vrai dire) :

UPDATE Task SET LinkedTaskId = OldTask.TaskId FROM Task AS OldTask WHERE OldTask.OldTaskId = OldTaskLinkedTaskId;

Ok, j’ai trouvé.

Je te laisse réfléchir sur les raisons de cette syntaxe :slight_smile:

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;

Note bien que NewTask & OldTask sont des alias.

Ca marche parfaitement, t’es un chef! Merci.

Ouuuu self join :slight_smile: 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 ! :slight_smile: