Requete SQL
cecile
-
cecile -
cecile -
Bonjour,
Je souhaite réaliser une requete sql concernant le résultat d'un match entre 2 equipes. La table matchs a deux clées etrangères provenant d'une table equipe. Le problème est que à l'exécution, la requete ne sort aucun enregistrement, voici mon code que je teste d'abord sous phpmyadmin:
SELECT date_match, lieu_match, equipe_dom, resultat_match, equipe_ext FROM matchs, tournoi, equipe where
matchs.id_tournoi=tournoi.id_tournoi
and matchs.equipe_dom=equipe.id_equipe
and matchs.equipe_ext=equipe.id_equipe
Je pense que le problème vient de deux clées etrangere dans la table matchs a qui référencent la clée primaire de la table equipe, car lorsque je supprime une condition par exemple, matchs.equipe_ext=equipe.id_equipe, la requete me renvoie des enregistrements.
Merci d'avance
Je souhaite réaliser une requete sql concernant le résultat d'un match entre 2 equipes. La table matchs a deux clées etrangères provenant d'une table equipe. Le problème est que à l'exécution, la requete ne sort aucun enregistrement, voici mon code que je teste d'abord sous phpmyadmin:
SELECT date_match, lieu_match, equipe_dom, resultat_match, equipe_ext FROM matchs, tournoi, equipe where
matchs.id_tournoi=tournoi.id_tournoi
and matchs.equipe_dom=equipe.id_equipe
and matchs.equipe_ext=equipe.id_equipe
Je pense que le problème vient de deux clées etrangere dans la table matchs a qui référencent la clée primaire de la table equipe, car lorsque je supprime une condition par exemple, matchs.equipe_ext=equipe.id_equipe, la requete me renvoie des enregistrements.
Merci d'avance
A voir également:
- Requete SQL
- Logiciel sql - Télécharger - Bases de données
- Requête sql pour afficher uniquement les fleurs dont le prix est strictement inférieur à 10 euros ✓ - Forum DS
- Sql (+) - Forum Programmation
- Jointure sql ✓ - Forum MySQL
- Quelle requête écrire pour demander au moteur de recherche de présenter de préférence les pages web traitant de tennis mais pas de tennis de table ✓ - Forum Android
3 réponses
est-que tu peux donner la structure de tes tables stp ? là tu a l'air de faire une requete activant trois tables.
merci
merci
Bonsoir,
SELECT date_match, lieu_match, equipe_dom, resultat_match, equipe_ext FROM matchs, tournoi, equipe where
matchs.id_tournoi=tournoi.id_tournoi
and matchs.equipe_dom=equipe.id_equipe
and matchs.equipe_ext=equipe.id_equipe
--> D'après les champs que vous récupérez dans votre requête, il est inutile pour le moment de faire une jointure avec la table equipe :
SELECT date_match, lieu_match, equipe_dom, resultat_match, equipe_ext FROM matchs, tournoi, equipe where
matchs.id_tournoi=tournoi.id_tournoi
--> c'est amplement suffisant.
Dans tous les cas, vous auriez du écrire votre requête ainsi si vous utilisez 2 fois la table equipe :
SELECT date_match, lieu_match, equipe_dom, resultat_match, equipe_ext FROM matchs, tournoi, equipe e1, equipe e2 where
matchs.id_tournoi=tournoi.id_tournoi
and matchs.equipe_dom= e1.id_equipe
and matchs.equipe_ext= e2.id_equipe
Faudrait même voir si vous utilisez des champs de la table tournoi.
Dans le cas contraire --> la jointure avec tournoi est là aussi inutile.
cdrlt.
SELECT date_match, lieu_match, equipe_dom, resultat_match, equipe_ext FROM matchs, tournoi, equipe where
matchs.id_tournoi=tournoi.id_tournoi
and matchs.equipe_dom=equipe.id_equipe
and matchs.equipe_ext=equipe.id_equipe
--> D'après les champs que vous récupérez dans votre requête, il est inutile pour le moment de faire une jointure avec la table equipe :
SELECT date_match, lieu_match, equipe_dom, resultat_match, equipe_ext FROM matchs, tournoi, equipe where
matchs.id_tournoi=tournoi.id_tournoi
--> c'est amplement suffisant.
Dans tous les cas, vous auriez du écrire votre requête ainsi si vous utilisez 2 fois la table equipe :
SELECT date_match, lieu_match, equipe_dom, resultat_match, equipe_ext FROM matchs, tournoi, equipe e1, equipe e2 where
matchs.id_tournoi=tournoi.id_tournoi
and matchs.equipe_dom= e1.id_equipe
and matchs.equipe_ext= e2.id_equipe
Faudrait même voir si vous utilisez des champs de la table tournoi.
Dans le cas contraire --> la jointure avec tournoi est là aussi inutile.
cdrlt.
Re,
Pour pas vous embrouiller à savoir si oui ou non il faudrait vraiment faire toutes vos jointures etc ... :
SELECT date_match, lieu_match, equipe_dom, resultat_match, equipe_ext
FROM matchs, tournoi, equipe e1, equipe e2
where
matchs.id_tournoi=tournoi.id_tournoi
and matchs.equipe_dom=e1.id_equipe
and matchs.equipe_ext= e2.id_equipe
--> Ça c'est correct comme requête et ça vous rendra vos enregistrements dans tous les cas.
A+.
Pour pas vous embrouiller à savoir si oui ou non il faudrait vraiment faire toutes vos jointures etc ... :
SELECT date_match, lieu_match, equipe_dom, resultat_match, equipe_ext
FROM matchs, tournoi, equipe e1, equipe e2
where
matchs.id_tournoi=tournoi.id_tournoi
and matchs.equipe_dom=e1.id_equipe
and matchs.equipe_ext= e2.id_equipe
--> Ça c'est correct comme requête et ça vous rendra vos enregistrements dans tous les cas.
A+.
Bonsoir,
Je vous remercie beaucoup de m'avoir répondu.
La structure de mes 3 tables (equipe, match, tournoi) est la suivante:
- equipe(id_equioe, nom_equipe, type)
-tournoi(id_tournoi, nom_tournoi)
-matchs(id_match, resultat_match, date_match, lieu_match, #equipe_dom, #equipe_ext, #id_tournoi)
Le but est de faire afficher un tableau de résultats en récupérant le nom des équipes extérieures et domiciles. Sur ce point, j'ai eu bcp de mal car les deux clés étrangères référencent la meme clé primaire id_equipe. Je pense qu'il faut faire donc une jointure avec la table equipe pour récupérer les noms des équipes.
La requete que vous m'avez donnée marche, effectivement, je souhaite utiliser deux fois la meme table equipe:
SELECT date_match, lieu_match, equipe_dom, resultat_match, equipe_ext FROM matchs, tournoi, equipe e1, equipe e2 where
matchs.id_tournoi=tournoi.id_tournoi
and matchs.equipe_dom= e1.id_equipe
and matchs.equipe_ext= e2.id_equipe
Par contre, lorsque j'ajoute un champ nom_equipe de la table equipe pour avoir le nom des équipes extérieurs et domiciles, j'ai un message "#1052 - Champ: 'nom_equipe' dans field list est ambigu"
Merci beaucoup
Je vous remercie beaucoup de m'avoir répondu.
La structure de mes 3 tables (equipe, match, tournoi) est la suivante:
- equipe(id_equioe, nom_equipe, type)
-tournoi(id_tournoi, nom_tournoi)
-matchs(id_match, resultat_match, date_match, lieu_match, #equipe_dom, #equipe_ext, #id_tournoi)
Le but est de faire afficher un tableau de résultats en récupérant le nom des équipes extérieures et domiciles. Sur ce point, j'ai eu bcp de mal car les deux clés étrangères référencent la meme clé primaire id_equipe. Je pense qu'il faut faire donc une jointure avec la table equipe pour récupérer les noms des équipes.
La requete que vous m'avez donnée marche, effectivement, je souhaite utiliser deux fois la meme table equipe:
SELECT date_match, lieu_match, equipe_dom, resultat_match, equipe_ext FROM matchs, tournoi, equipe e1, equipe e2 where
matchs.id_tournoi=tournoi.id_tournoi
and matchs.equipe_dom= e1.id_equipe
and matchs.equipe_ext= e2.id_equipe
Par contre, lorsque j'ajoute un champ nom_equipe de la table equipe pour avoir le nom des équipes extérieurs et domiciles, j'ai un message "#1052 - Champ: 'nom_equipe' dans field list est ambigu"
Merci beaucoup
Bonjour,
Utiliser 2 fois la même table équipe est strictement nécessaire dans votre cas pour récupérer vos billes et correspond en faite à une "auto-jointure" car 2 colonnes de la table match pointent vers une même clef primaire d'une table externe.
> J'avais oublié d'indiquer les références des tables associées aux colonnes affichées et voici donc la correction :
SELECT m.date_match, m.lieu_match, m.equipe_dom, m.resultat_match, m.equipe_ext
FROM matchs m, tournoi t, equipe e1, equipe e2
where
m.id_tournoi = t.id_tournoi
and m.equipe_dom= e1.id_equipe
and m.equipe_ext= e2.id_equipe
Remarque :
Merci pour nous avoir donné la structure de vos tables mais comme vous pourrez le constater, les colonnes affichées ne dépendent que de la table match - les jointures ne sont donc pas 'strictement' nécessaires ici si votre référentiel est correctement construit (respect des contraintes de référence) et cette requête revient à celle ci (vous pouvez le tester et comparer) :
SELECT date_match, lieu_match, equipe_dom, resultat_match, equipe_ext
FROM matchs
amicalement.
Utiliser 2 fois la même table équipe est strictement nécessaire dans votre cas pour récupérer vos billes et correspond en faite à une "auto-jointure" car 2 colonnes de la table match pointent vers une même clef primaire d'une table externe.
> J'avais oublié d'indiquer les références des tables associées aux colonnes affichées et voici donc la correction :
SELECT m.date_match, m.lieu_match, m.equipe_dom, m.resultat_match, m.equipe_ext
FROM matchs m, tournoi t, equipe e1, equipe e2
where
m.id_tournoi = t.id_tournoi
and m.equipe_dom= e1.id_equipe
and m.equipe_ext= e2.id_equipe
Remarque :
Merci pour nous avoir donné la structure de vos tables mais comme vous pourrez le constater, les colonnes affichées ne dépendent que de la table match - les jointures ne sont donc pas 'strictement' nécessaires ici si votre référentiel est correctement construit (respect des contraintes de référence) et cette requête revient à celle ci (vous pouvez le tester et comparer) :
SELECT date_match, lieu_match, equipe_dom, resultat_match, equipe_ext
FROM matchs
amicalement.
Re,
(j'avais pas vu votre besoin sur nom_equipe) :
SELECT m.date_match AS DATE_MATCH, m.lieu_match AS LIEU_MATCH, m.equipe_dom AS ID_EQUIPE_DOM, m.resultat_match AS RES_MATCH, m.equipe_ext AS ID_EQUIPE_EXT, e1.nom_equipe AS NOM_EQUIPE_DOM, e2.nom_equipe AS NOM_EQUIPE_EXT
FROM matchs m, tournoi t, equipe e1, equipe e2
where
m.id_tournoi = t.id_tournoi
and m.equipe_dom= e1.id_equipe
and m.equipe_ext= e2.id_equipe
Avec :
e1.nom_equipe : c'est le nom de l'équipe à domicile
e2.nom_equipe : c'est ici le nom de l'équipe extérieure.
Voilà je pense.
(j'avais pas vu votre besoin sur nom_equipe) :
SELECT m.date_match AS DATE_MATCH, m.lieu_match AS LIEU_MATCH, m.equipe_dom AS ID_EQUIPE_DOM, m.resultat_match AS RES_MATCH, m.equipe_ext AS ID_EQUIPE_EXT, e1.nom_equipe AS NOM_EQUIPE_DOM, e2.nom_equipe AS NOM_EQUIPE_EXT
FROM matchs m, tournoi t, equipe e1, equipe e2
where
m.id_tournoi = t.id_tournoi
and m.equipe_dom= e1.id_equipe
and m.equipe_ext= e2.id_equipe
Avec :
e1.nom_equipe : c'est le nom de l'équipe à domicile
e2.nom_equipe : c'est ici le nom de l'équipe extérieure.
Voilà je pense.