Bonjour,

j'ai un soucis avec une requête de mise à jour d'un champ avec une sous-requête

voici le schéma succinct de mes tables (j'ai omis les champs inutiles pour la requête)

orders: id, user_id
order_prestation : order_id, qty
prestation: id, number
event_session: user_id, prestation_id, total

Un bug dans mon appli a fait que le champ total de la table event_session a été modifié avec une mauvaise valeur sur certaines entrées

il doit prendre la valeur event_session.total = (prestation.number * order_prestation.qty)

J'ai créer une requête pour vérifier combien d'entrés on subit le bug:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
SELECT
orders.id as facture_id,
orders.ref as facture_ref,
event_session.id as event_session_id,
order_prestation.id as order_prestation_id,
event_session.user_id as userid,
event_session.prestation_id as presta_id,
order_prestation.prestation_id as order_prestation_prestation_id,
event_session.total as total_a_corriger,
(prestation.number * order_prestation.qty) as total_ok
FROM order_prestation
JOIN orders ON orders.id = order_prestation.order_id
JOIN event_session ON order_prestation.prestation_id = event_session.prestation_id
JOIN prestation ON prestation.id = order_prestation.prestation_id
WHERE event_session.total != (prestation.number * order_prestation.qty)
AND order_prestation.prestation_id = event_session.prestation_id
AND event_session.user_id = orders.user_id
Je voulais les corriger manuellement pensant qu'il n'y en avait pas beaucoup, mais en fait j'ai 60 bdd à mettre à jour j'ai regarder 5 bdd dans 2 j'ai pas d'erreur, les trois autres j'ai 27, 150, et plus de 300 entrées à modifier...

J'ai donc opté pour une maj auto avec un requête :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
 
UPDATE event_session SET event_session.total = (
  SELECT
  (prestation.number * order_prestation.qty) as total_ok
  FROM order_prestation
  JOIN orders ON orders.id = order_prestation.order_id
  JOIN event_session ON order_prestation.prestation_id = event_session.prestation_id
  JOIN prestation ON prestation.id = order_prestation.prestation_id
  WHERE event_session.total != (prestation.number * order_prestation.qty)
  AND order_prestation.prestation_id = event_session.prestation_id
  AND event_session.user_id = orders.user_id
)
Mais évidemment ça ne passe pas : `You can't specify target table 'event_session' for update in FROM clause`
Je sèche!
Si quelqu'un a une idée je suis preneur.

Merci