Bonjour,
Jeu de test
Table _produit
id nom 1 TV 2 Voyage
Table _vente
id prix produit date 1 500 TV 2000-01-01 2 600 TV 2010-01-01 3 1200 Voyage 2010-01-01 4 900 Voyage 2000-01-01
Objectif
Afficher chaque produit avec son prix vente le plus cher et sa date.
produit prix date TV 600 2010-01-01 Voyage 1200 2010-01-01
Deux solutions
1/ Sous-requêtes dans INNER
Celle-ci se comprend très bien, on imagine que la sous-requête est exécutée en 1er pour constituer une "table virtuelle" puis la jointure est réalisée sur deux colonnes.
2/ Sous-requête dans un IN
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 SELECT * FROM _produit p INNER JOIN _vente v1 ON p.id = v1.produit INNER JOIN ( SELECT produit, max(prix) as prix FROM _vente v2 GROUP BY produit ) as v ON p.id = v.produit AND v.prix = v1.prix
Celle-ci fonctionne également mais se comprend difficilement... Comment le traitement est-il exécuté ?
3/ Quelle est la requête la plus performante ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 SELECT * FROM _vente v1 INNER JOIN _produit p1 ON p1.id = v1.produit WHERE v1.prix IN ( SELECT max(v2.prix) FROM _vente v2 WHERE p1.id = v2.produit )
Merci
Partager