vroum vroum mysql : requête imbriquée

Azertyty
Invité n'ayant pas de compte PHPfrance

03 avr. 2013, 14:17

Ma base de données :

Voiture
id_voiture
nom_voiture
carac_voiture
type_voiture
valable_voiture

Liaison
id_couleur
id_voiture


Couleur
id_couleur
nom_couleur

--------
Donc dans l'idée une voiture peut avoir plusieurs couleurs, et une couleur peut aller à plusieurs voitures.

Ex : Voiture dont l'identifiant est 1 existe en bleu, vert, vert émeraude, gris, jaune

Mon problème
:
- j'ai commencé par exporter via à la requête ci-dessous toutes les voitures qui ont comme couleur un dégradé de vert (elle fonctionne)
SELECT distinct v.nom_voiture, c.nom_couleur
FROM voiture v, liaison l, couleur c
WHERE v.id_voiture=l.id_voiture
AND c.id_couleur=l.id_couleur
AND c.nom_couleur LIKE '%vert%'
AND v.valable_voiture =1
ORDER BY v.id_voiture ASC
- Ensuite, le coeur du problème, c'est que je souhaiterai afficher "le reste", c'est à dire toutes les voitures en dehors de celle qui ont la caractéristique verte (en sachant que je ne veux pas voir les voitures pour lesquelles une des couleur disponible soit le vert )
select *
from voiture 
where id_voiture NOT IN ( SELECT v.id_voiture
FROM voiture v, liaison l, couleur c
WHERE v.id_voiture=l.id_voiture
AND c.id_couleur=l.id_couleur
AND c.nom_couleur LIKE '%vert%'
AND v.valable_voiture =1
)

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

03 avr. 2013, 18:47

plutot je pense :
select * from voiture 
where id_voiture not in (
select id_voiture from liaison where id_couleur = (
select id_couleur from couleur nom_couleur='vert'
)
);
Il en faut peu pour être heureux ......