Bonjour,

C'est mon 1er post sur les forums de Developpez.com que je consulte très souvent pour trouver réponse à mes questions. Débutant en MySQL (deux ans que je me suis mis à la programmation en tant que professionnel, autodidacte, sous Windev).

Je dois souvent faire appel à des sous-requêtes, et j'ai souvent fait l’amère expérience de voir que les sous-requêtes sont forcément indépendantes de la requête principale.

Or, il y un cas où, sans vraiment comprendre pourquoi, il m'est possible d'utiliser dans la sous-requête, une rubrique d'une table de la requête principale, alors qu'elle n'est pas jointe dans ma sous-requête.

Exemple:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
UPDATE prat prat 
LEFT JOIN pr pr ON (prat.id_product = pr.id_product ) 
SET pr.quantity= (
    SELECT SUM(prat.quantity) 
    FROM prat prat  
    WHERE prat.id_product=pr.id_product 
) WHERE pr.idproduct IN (1,2)
Ici ,ma sous-requête
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
SELECT SUM(prat.quantity) 
FROM prat prat  
WHERE prat.id_product=pr.id_product
fait appel à pr.id_product dans le where, Or l'alias pr n'est défini que dans la requête principale.

Ce type de requêtes combinées marche très bien, mais je ne comprends pas pourquoi et surtout je voudrais savoir, quand on peut, ou non, dans une sous-requête, faire appel à des rubriques de tables définies à l'extérieur.
Le seul cas d'utilisation qui semble fonctionner, est le cas des UPDATE sur deux tables liées, comme ci-dessus.

Si quelqu'un peut m'expliquer ou me renvoyer vers une doc expliquant ces principes. Merci d'avance.

Franck
www.sitolog.com