Partage
  • Partager sur Facebook
  • Partager sur Twitter

Requête conditionnelle

Récupérer un résultat dans une table si il est pas vide

    9 septembre 2011 à 10:48:48

    Bonjour à tous.

    J’ai un petit problème de requête SQL depuis hier après midi. Ce que je cherche à faire est récupérer une valeur dans une table MySQL et si cette valeur est vide, aller la chercher dans une autre table. Je vous fais un dessin.

    Table `offres`
    id_offre region id_lieu
    1 Paris
    2 3
    3 1


    Table `lieu`
    id region
    1 Île de France
    2 Provence alpes côte d’azur
    3 Bretagne


    La requête:
    SELECT
    	`id_offre`,
    	 IF
    	(
    		`offres`.`region` != "",
    		`offres`.`region`,
    		`lieu`.`region`
    	)
    FROM
    	`offres`,
    	`lieu`
    


    Sauf que, ça ne fonctionne pas vraiment comme je le voudrais, voici le résultat de MySQL:
    id IF (`offres`.`region`…)
    1 Paris
    2 Île de France
    3 Île de France
    1 Paris
    2 Provence alpes côte d’azur
    3 Provence alpes côte d’azur
    1 Paris
    2 Bretagne
    3 Bretagne


    Alors, je me doute que je n’ai pas très bien fait quelquechose, à mon avis il manque une clause WHERE pour définir que `lieu`.`id` est associé à `offres`.`lieu` toutefois je ne sais pas où ni comment placer cette clause WHERE vu que certaines lignes n'ont pas de lieu. Avec un IF dans la clause WHERE ?

    Merci d’avance pour votre aide!
    • Partager sur Facebook
    • Partager sur Twitter
      9 septembre 2011 à 11:15:33

      Salut,

      J'essaye:

      SELECT O.id_offre,
         CASE O.region
           WHEN "" THEN L.id_lieu
                    ELSE O.region
      FROM offre as O
        RIGHT OUTER JOIN lieu as L
        ON O.id_lieu=L.id
      


      Bon, j'avoue que je ne suis pas sûr du type de jointure à utiliser (c'est peut être bien LEFT OUTER JOIN o_O ). Voir ici

      Edit: Bon, en fait ce serait plutôt un LEFT OUTER JOIN :-°
      • Partager sur Facebook
      • Partager sur Twitter
        9 septembre 2011 à 15:05:05

        Je crois bien que c'est un left aussi.
        Par contre juste un petit oubli du END :
        SELECT O.id_offre,
           CASE O.region
             WHEN "" THEN L.region
                      ELSE O.region END
        FROM offre as O
          LEFT OUTER JOIN lieu as L
          ON O.id_lieu=L.id
        
        • Partager sur Facebook
        • Partager sur Twitter
          9 septembre 2011 à 15:30:21

          Oui, effectivement, bien vu... ;)
          • Partager sur Facebook
          • Partager sur Twitter

          Requête conditionnelle

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown