Deux tables

Résolu
anthonyr_25 Messages postés 172 Statut Membre -  
anthonyr_25 Messages postés 172 Statut Membre -
Bonjour,

Je débute dans mysql et j'aimerais afficher deux table l'une a côté de l'autre, mais quand j'execute ma commande cela me cumule mon tableau 1 avec le nombre de ligne du tableau 2...
Alors il n'ont pas le même nombre de colonnes mais il ont le même nombre de lignes... alors je comprend pas pourquoi sa cumule plutôt que d'afficher simplement les tableau l'un a coté de l'autre

SELECT * FROM table1, table2;


Configuration: Windows / Chrome 98.0.4758.102

20 réponses

Résumé de la discussion

Affichage de deux tables côte à côte sous MySQL échoue lorsque l’on utilise SELECT * FROM table1, table2, car la requête produit un produit cartésien en l’absence de condition de jointure. Des réponses recommandent d’apprendre les jointures avec JOIN et ON ou WHERE pour rapprocher des tables liées par une clé étrangère, plutôt que d’afficher deux listes séparées. Des échanges illustrent, par l’exemple des apprenants et départements, qu’une jointure sur le critère dpt est nécessaire et qu’en l’absence d clé commune, aucune jointure utile n’est possible. En pratique, les outils de mise en forme peuvent afficher des résultats, mais SQL pur vise à rapprocher les données via des jointures plutôt que d’empiler des tables sans relation.

Généré automatiquement par IA
sur la base des meilleures réponses
  1. jee pee Messages postés 31883 Date d'inscription   Statut Modérateur Dernière intervention   9 979
     
    "Afficher le nom de chaque apprenant avec son département de résidence." c'est donc une jointure, pas 2 listes distinctes du contenu de chaque table.

    Et cela signifie qu'il faut dans la table membre, avoir à minima (nom,dpt) et dans departement (dpt,intitule). Et on est alors bien dans le cas d'une jointure entre les 2 tables sur le critère dpt
    1
  2. anthonyr_25 Messages postés 172 Statut Membre 6
     
    C'est good !!!!

    j'avais du mal a comprendre qu'en fait vu que sa calcule forcément sa ajoute toutes les valeurs multiplié !!!
    Merci pour ta patience et ton apprentissage
    1
  3. jee pee Messages postés 31883 Date d'inscription   Statut Modérateur Dernière intervention   9 979
     
    Bonjour,

    C'est le principe, une référence croisée : nb lignes T1 X nb lignes T2. Mais généralement on associe une restriction
    WHERE T1.idx = T2.idx
    car ce type de requête, une jointure, est destinée à rapprocher des tables ayant un rapport entre elles.

    Ce n'est pas fait pour ce que toi tu veux faire. Pas en SQL pur. Après dans un outil de requetage qui s’intéresse à la mise en forme, un logiciel de BI ...

    0
  4. anthonyr_25 Messages postés 172 Statut Membre 6
     
    Hmm d'accord et si par exemple je voulais afficher simplement deux colonnes l'une a coté de l'autre :
    col1 et col2 mais que col2 se trouve dans un autre tableau est ce que cela est possible ?
    0
    1. jee pee Messages postés 31883 Date d'inscription   Statut Modérateur Dernière intervention   9 979
       
      tableau ?? table ?

      avec un peu d'expérience on pourrait avec des artifices le faire. Mais commence par approfondir les jointures cela te sera plus profitable
      1
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. anthonyr_25 Messages postés 172 Statut Membre 6
     
    En fait je suis en formation et sa fait partie de mon exercice je devais créer deux table :
    une table avec un champ et une autre table avec deux champ puis afficher les enregistrement de chaque table...
    je me suis informé sur les jointures mais j'ai l'impression qu'aucune ne correspond...
    0
    1. jee pee Messages postés 31883 Date d'inscription   Statut Modérateur Dernière intervention   9 979
       
      et tu es sur que dans l’exercice on te dit d'afficher cote cote 2 tables sans rapport entre elles ?
      1
  7. anthonyr_25 Messages postés 172 Statut Membre 6
     
    "Créer deux nouvelles tables, une qui contient l’ensemble des membres de l’ACS, l’autre qui
    contient les départements avec numéros et noms écrits. Afficher le nom de chaque apprenant
    avec son département de résidence."
    Voila la consignes, alors j'ai créer les table une avec un champ qui comporte les membres et une autre table qui comporte deux champ, l'un avec les numéros du département et l'autre avec les départements de résidence
    0
    1. anthonyr_25 Messages postés 172 Statut Membre 6
       
      après j'aurais pu faire table2 avec simplement un champ qui comporte a la fois les numéros et les noms des départements, peux être que le problème vient de la.. du coup je suis en train de voir pour inserer un champ d'une autre table (table2) temporairement dans ma table (table1) mais je pensse que c'est impossible ..
      0
  8. anthonyr_25 Messages postés 172 Statut Membre 6
     
    D'accord, donc je ne doit pas créer un seul champ dans la table1 membres mais bien deux champ avec (pour le deuxieme champ) un nom identique que dans la table2 pour prévoir l'arrivé du champ de la table2 c'est sa ?
    0
    1. jee pee Messages postés 31883 Date d'inscription   Statut Modérateur Dernière intervention   9 979
       
      Une jointure c'est regrouper des informations de différentes tables sur des critères.

      Là on veut obtenir "Dupont Morbihan". Avec dans la table membre (Dupont, 56) et dans departement (56,Morbihan).

      La requête va effectuer une jointure entre les 2 tables sur le n° de département. Il n'est pas obligatoire que les champs aient le même nom. Cela peut arriver membre.dpt=departement.dpt mais dans la table membre, le champ pourrait s'appeler adresse_dpt on aurait alors une jointure sur membre.adresse_dpt = departement.dpt
      0
  9. anthonyr_25 Messages postés 172 Statut Membre 6
     
    Ha donc si je comprend bien il faut avoir un champ dans table1 avec des enregistrements identiques que le champ dans table2 ?
    0
    1. jee pee Messages postés 31883 Date d'inscription   Statut Modérateur Dernière intervention   9 979
       
      Plus exactement, un champ dans table1 qui contient une valeur présente dans un champ de table2. Et généralement le champ dans table2 sera la clé primaire de la table.

      Ce champ sert à faire le lien entre les informations des 2 tables. Avec on va pouvoir trouver les départements de résidence des membres, ou par exemple tous les membres habitant le Morbihan.
      0
  10. anthonyr_25 Messages postés 172 Statut Membre 6
     
    Hmmm donc par exemple si je rajoute un champ id dans table1 et table2 je pourrais caller ma jointure sur id
    0
    1. jee pee Messages postés 31883 Date d'inscription   Statut Modérateur Dernière intervention   9 979
       
      si tu rajoutes un champ id dans table1, ce ne sera pas la même notion que l'id de la table2.

      puisque dans table1 ce serait par exemple le n° de membre, alors que l'id dans département serait le N° du département. C'est bien pourquoi j'ai précisé que la jointure peut s'effectuer sur des noms différents.

      table1 (id,nom, adresse_dpt) table2 (id, intitule) ==> WHERE table1.adresse_dpt = table2.id

      et il sera plus aisé pour l'utilisation d'avoir des noms de champs plus significatifs qu'id

      comme id_membre, id_dpt, membre_id, dpt_id, ou num_membre, num_dpt
      0
  11. anthonyr_25 Messages postés 172 Statut Membre 6
     
    Je pense que je suis pas loin j'essaie de le faire avec LEFT JOIN mais sa me met pas les enregistrements sa me met NULL..
    0
    1. jee pee Messages postés 31883 Date d'inscription   Statut Modérateur Dernière intervention   9 979
       
      maintenant j'ai l'impression que tes tables contiennent trop de champs

      quelles sont les descriptions de chaque table ? et il serait préférable de les appeler membre et departement
      0
  12. anthonyr_25 Messages postés 172 Statut Membre 6
     
    J'ai rajouter des champs normalement il y as :
    table1 -> champ "membreacs"
    table2 -> champ "numero" , "departement"
    et dasn la table1 j'ai rajouter deux champ "numero" , "departement"
    pour que sa corresponde avec table2
    0
  13. anthonyr_25 Messages postés 172 Statut Membre 6
     
    voila ce que sa donne sans les champs que j'ai rajouter

    je pensse qu'il faut que je precise que c'est des TEXT ou VARCHAR ou INT
    0
  14. jee pee Messages postés 31883 Date d'inscription   Statut Modérateur Dernière intervention   9 979
     
    Repars sur des bases simples :

    membre (id_mbr,nom, id_dpt)
    departement (id_dpt, intitule)
    0
  15. anthonyr_25 Messages postés 172 Statut Membre 6
     
    okay je fait sa
    0
  16. anthonyr_25 Messages postés 172 Statut Membre 6
     
    c'est bon
    0
    1. jee pee Messages postés 31883 Date d'inscription   Statut Modérateur Dernière intervention   9 979
       
      la table departement ne doit contenir qu'une seule occurence de chaque département , c'est la jointure qui donne à chaque membre son intitulé departement

      et quid du select avec join
      1
  17. anthonyr_25 Messages postés 172 Statut Membre 6
     
    d'accord pour le département, et le select avec JOIN c'est vrai que je l'utilisais mal donc sa marchait pas alors j'ai tenté autre chose, mais je vais l'utilisé maintenant que j'ai des table neuves
    0
  18. anthonyr_25 Messages postés 172 Statut Membre 6
     
    par contre sa m'affiche deux fois le id_departement donc il faudrait plutôt que j'utilise maintenant ce que tu m'as conseiller
    0
    1. jee pee Messages postés 31883 Date d'inscription   Statut Modérateur Dernière intervention   9 979
       
      ou un select avec les champs nommés, select table1.nom, table2.id_dpt, table2.intitule

      maintenant supprime l"enregistrement 99 de departement et affiche quand même tous les membres
      0
  19. anthonyr_25 Messages postés 172 Statut Membre 6
     
    le select avec le nom des champ sa fonctionne pas sa multiplie tout, en revanch j'ai pas compris ta dernière consigne de supprimer l'enregistrement 99 ?
    0
    1. jee pee Messages postés 31883 Date d'inscription   Statut Modérateur Dernière intervention   9 979
       
      fais voir ta reequete, le select avec les champs nommés doit fonctionner

      tu supprimes l'enregistrement dpt 99, tu lances ta requête, les membres concernés ne devrais plus être affichés, comment quand même les afficher ?
      0
  20. anthonyr_25 Messages postés 172 Statut Membre 6
     
    ma requete :
    SELECT table1.nom, table2.id_dpt, table2.intitule FROM table1, table2;

    je ne sais pas ... si je supprime l'enregistrement je ne pourrais plus les voirs...
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      bonjour,
      qu'as-tu appris dans ta formation?
      tu as uniquement des exercices, ou aussi de la matière?
      0
      1. anthonyr_25 Messages postés 172 Statut Membre 6 > yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention  
         
        non aucune matière ont est sencé apprendre seule c'est le but donc deja la ce que je fait c'est de la triche un peu ^^
        0
    2. jee pee Messages postés 31883 Date d'inscription   Statut Modérateur Dernière intervention   9 979
       
      tu as trouvé comment utiliser join et tu repars sur ta syntaxe de départ défaillante !
      0
      1. anthonyr_25 Messages postés 172 Statut Membre 6 > jee pee Messages postés 31883 Date d'inscription   Statut Modérateur Dernière intervention  
         
        c'est a dire ?
        0
  21. anthonyr_25 Messages postés 172 Statut Membre 6
     
    Du coup voila ou j'en suis :

    sachant que dans ma table2 (departement) il n'y a que 4 departement (ceux qui sont different)
    est ce que c'est bon ?
    pour moi je trouve que sa marche
    0
    1. jee pee Messages postés 31883 Date d'inscription   Statut Modérateur Dernière intervention   9 979
       
      effectivement c'est ce à quoi il faut arriver.

      supprime le département 99 de table2 et relance ta requete
      0
    2. anthonyr_25 Messages postés 172 Statut Membre 6 > jee pee Messages postés 31883 Date d'inscription   Statut Modérateur Dernière intervention  
       
      par contre le hik c'est que dans mon table1 j'ai une colonnes id_dpt avec les chiffres des departement ce qui n'est pas préciser dans la consigne... mais sinon appart avec des id je ne voit pas comment les faires correspondre..
      0
    3. jee pee Messages postés 31883 Date d'inscription   Statut Modérateur Dernière intervention   9 979 > anthonyr_25 Messages postés 172 Statut Membre
       
      si tu n'indiques pas on département pour un membre, pas de solution pour une jointure, donc aucun rapprochement possible
      1
    4. anthonyr_25 Messages postés 172 Statut Membre 6 > jee pee Messages postés 31883 Date d'inscription   Statut Modérateur Dernière intervention  
       
      DU coup c'est bon je les ait relié grace a des id :

      je trouve que c'est plus propre !
      Merci en tout cas, problème résolu sa fait du bien ^^
      0
    5. jee pee Messages postés 31883 Date d'inscription   Statut Modérateur Dernière intervention   9 979 > anthonyr_25 Messages postés 172 Statut Membre
       
      c'est une solution incongrue d'inventer une clé supplémentaire quand il existe une clé naturelle le code département.
      0