Partage
  • Partager sur Facebook
  • Partager sur Twitter

Joindre 2 tables sans clés étrangères

    28 avril 2021 à 12:35:09

    Bonjour,

    Sous PostgreSQL, je possède 2 tables dont j'aimerais créer une relation, l'une des tables concerne des mesures, avec le lieu, la date et le nombre de mesures, l'autre table concerne des données météorologiques avec des températures.
    Le problème est que j'aimerais créer une relation entre les 2 tables au niveau de la date, le problème étant que même si je créé 'date' en clé primaire de la table Météo, les données de celles-ci comment en 2014 alors que mes données de mesures commencent en 1999.
    J'aimerais donc qu'il soit possible de voir la météo le jour de telle mesure uniquement lorsque le jour est disponible sur la table Météo, mais celui-ci étant la clé étrangère de la table Mesure, je ne peux pas mettre de date dans la table Mesure qui n'existe pas dans la table Météo. En gros, j'aimerais qu'il y ait jointure sans que l'un des attributs soit clé étrangère de l'autre.

    En espérant avoir été assez clair, avez-vous une solution pour résoudre ce problème ?

    Merci et très bonne journée !
    • Partager sur Facebook
    • Partager sur Twitter
      28 avril 2021 à 13:58:17

      Bonjour,

      Peux-tu poster la structure des deux tables en question ( colonnes, types, clés et contraintes ) et donner un exemple de données dans ces deux tables et le résultat que tu espérerais ?

      • Partager sur Facebook
      • Partager sur Twitter
      Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
        28 avril 2021 à 17:03:20

        Bonjour,

        Bien sûr, voici en gros mes données Météo :

        Date

        TMin (°C)

        TMax (°C)

        TMoy (°C)

        01/01/2016 5.35 10.95 8.15
        03/01/2016 5.8 10.2 8.0
        07/01/2016 6.85 12.55 9.7
        11/01/2016 4.95 10.3 7.62
        12/01/2016 5.35 9.25 7.3
        15/01/2016 -0.05 7.25 3.6
        17/01/2016 -2.55 7.25 2.35
        19/01/2016 1.1 3.3 2.2
        25/01/2016 5.15 14.95 10.05

        Ainsi que mes données Mesures :

        Identifiant Date Total
        1003 29/09/2011 125
        1000 22/09/2010 217
        1002 01/10/2013 44
        1000 15/09/2010 69
        1004 22/09/2010 175
        1001 01/10/2013 208
        1002 15/09/2010 100
        1002 25/09/2014 71
        1004 27/09/2012 180

        En bref, j'ai un attribut Date dans chaque table que j'aimerais lier, mais sans obligation que la date de ma table Mesure soit présente dans la table dans la table Météo, juste une jointure simple en quelque sorte. Info supplémentaire : une date sera unique dans la table Météo mais elle peut figurer plusieurs fois dans la table Mesure.

        Merci à vous !

        • Partager sur Facebook
        • Partager sur Twitter
          28 avril 2021 à 17:10:37

          Alors je suppose que ceci ferait l'affaire :

          SELECT
          	M1.date,
          	M1.identifiant,
          	M1.total,
          	M2.Tmin,
          	M2.Tmax,
          	M2.Tmoy
          FROM
          	Mesures M1
          		LEFT JOIN Meteo M2
          			ON M1.date = M2.date
          ORDER BY M1.date ASC
          • Partager sur Facebook
          • Partager sur Twitter
          Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
            29 avril 2021 à 0:44:41

            C'est effectivement une idée, donc si je comprends bien, initialement, la table Météo n'aura aucune relation avec ma table Mesure (ni avec aucune autre table d'ailleurs), je créé la jointure uniquement au moment de mes requêtes ?

            • Partager sur Facebook
            • Partager sur Twitter
              29 avril 2021 à 9:25:11

              Oui simplement, et pour améliorer la performance de cette requête, placer un index sur la colonne date de la table meteo.

              • Partager sur Facebook
              • Partager sur Twitter
              Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL

              Joindre 2 tables sans clés étrangères

              × 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