Bonjour à tous et merci d'avance pour votre aide,
Je vous expose mon problème.
J'ai 3 tables dans une base de données :
- constructeur (id_constructeur, nom_constructeur)
- software_editeur (id_editeur, editeur)
- contact (id_contact, nom, prenom, id_type_marque, id_marque, autre_marque, telephone_fixe, telephone_portable, mail)
Je cherche à créer une requête qui, si id_type_marque est égal à 1, cherchera id_marque = id_constructeur dans la table constructeur et si id_type_marque est égal à 2 cherchera id_marque = id_software dans la table software_editeur.
Voici la requête que j'ai créé pour le moment :
Comme vous vous en doutez, cette requête ne fonctionne pas car le contact.id_marque dans les requêtes CASE ne correspond pas à celui du SELECT de la requête principale.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 SELECT contact.id_contact, contact.nom, contact.prenom, contact.id_type_marque, contact.id_marque, contact.autre_marque, contact.telephone_fixe, contact.telephone_portable, contact.mail, GROUP_CONCAT(region.region SEPARATOR ", ") as regions, CASE WHEN contact.id_type_marque = 1 THEN (SELECT constructeur.nom_constructeur FROM constructeur, contact WHERE constructeur.id_constructeur = contact.id_marque LIMIT 1) ELSE (SELECT software_editeur.editeur FROM software_editeur, contact WHERE software_editeur.id_editeur = contact.id_marque LIMIT 1) END AS marque FROM contact, region, liaison_contact_region WHERE region.id_region = liaison_contact_region.id_region AND contact.id_contact = liaison_contact_region.id_contact
Ma question est donc la suivante : est-il possible de faire en sorte que le contact.id_marque corresponde à celui de la requête principale ?
Si non, existe t-il un moyen différent pour obtenir ce que je souhaite ?
Merci d'avance pour votre aide.
Partager