Partage
  • Partager sur Facebook
  • Partager sur Twitter

Requete sur 3 tables avec jointure externe

    3 septembre 2010 à 13:33:11

    Bonjour,

    soit,
    table x (product_code, name, prix)
    table y (product_code, name, prix)
    table z (product_code, name, prix)

    Sur la table x et y, seul la variable prix change. Même code, même nom.
    Sur la table z, le code et le prix change, la variable nom peut quelquefois changer légérement.

    Je voudrais donc faire une seule requête sur ces 3 tables en sélection les différents prix d'une chaussure.

    $sql = "SELECT x.product_name AS product_name1, x.offline_price AS offline_price_x,
     y.offline_price AS offline_price_y, z.offline_price AS offline_price_z,  
    FROM tablex x, tabley  y, tablez  z WHERE x.product_code='".$product_code."'
     AND y.product_code='".$product_code."' AND z.product_name LIKE '".$titre."'
     AND z.level1='".$console."'";
    


    Le problème est que je voudrais que les deux dernières conditions: z.product_name LIKE '".$titre."' AND z.level1='".$console."'" s'appliquent uniquement à la table Z. Or là, elles s'appliquents à mes 3 tables et me font buger mon truc.

    Donc c'est là que je pense que je dois passer par les jointures externes.
    J'ai tenté de faire un
    INNER JOIN tablez Z ON z.product_name LIKE '".$titre."' AND z.level1='".$console."'"
    Mais sans succès.


    Est ce possible de n'appliquer des conditions WHERE qu'à une seule table ?



    Merci
    • Partager sur Facebook
    • Partager sur Twitter
      3 septembre 2010 à 15:34:52

      Trois tables avec les mêmes champs => ta structure est a revoir.
      • Partager sur Facebook
      • Partager sur Twitter
      Ce n'est pas parce que vous ne savez pas vous servir d'un marteau qu'il faut planter des clous au tournevis.
        3 septembre 2010 à 15:37:47

        Ce sont des fichiers csv que je recois chaque semaine et que je mets à jour.
        • Partager sur Facebook
        • Partager sur Twitter
          3 septembre 2010 à 15:38:59

          Ça n'empêche pas que la structure de ta base est à revoir (sauf contexte particulier ?).
          • Partager sur Facebook
          • Partager sur Twitter
          Ce n'est pas parce que vous ne savez pas vous servir d'un marteau qu'il faut planter des clous au tournevis.
            3 septembre 2010 à 17:36:37

            c'est un cas particulier, je ne peux faier autrement
            • Partager sur Facebook
            • Partager sur Twitter
              8 septembre 2010 à 0:05:29

              bonjour,
              ta requête n'est pas une jointure mais un produit cartésien auquel tu appliques une condition.
              Donc au passage très coûteux.
              La base de la jointure (en syntaxe non ANSI) :
              SELECT col1, col2, ...
              FROM x, y
              WHERE x.clePrimaire = y.cleEtrangere
              

              et avec une condition supplémentaire ...
              SELECT col1, col2, ...
              FROM x, y
              WHERE x.clePrimaire = y.cleEtrangere 
              AND condition ...
              

              Le problème dans ton cas, c'est sur quoi se baser?
              Sur x et Y OK. Même code.
              Sur x,y et z si le code change et le nom aussi alors c'est difficile.
              Mais ta requête de base, dans l'esprit, est bonne. Donc c'est cell-là qu'il faut creuser.
              Et une jointure externe ce sera avec LEFT ou RIGHT OUTER JOIN ...
              INNER JOIN c'est la syntaxe ANSI pour la jointure de base comme plus haut.
              • Partager sur Facebook
              • Partager sur Twitter

              Requete sur 3 tables avec jointure externe

              × 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