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 :

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
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.

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.