Bonjour,
Je souhaite actuellement réaliser une base de donnée pour la mise en place d'une application de gestion de parc informatique :
Le problème que je rencontre, c'est que je n'arrive pas à faire les jointures de mes différentes tables :
Voici la conception actuelle de ma base :
Bureau
Propriétaire
Poste
Ecran
Avoir
J'ai fait 4 jointures sur la table avoir, par exemple le champs avoir.id_bureau pointe sur bureau.id_bureau.
Mais quand je fait ce genre de requette, la base me renvoi une valeur vide :
SELECT *
FROM bureau, poste, ecran, proprio, avoir
WHERE bureau.id_bureau = avoir.id_bureau
AND poste.id_poste= avoir.id_poste
AND ecran.id_ecran= avoir.id_ecran
AND proprio.id_proprio= avoir.id_proprio
Merci de votre aide.
Il y a effectivement ambiguïté sur les dans num_serie, marque, date_achat et date_fingarantie, pour éviter cela, en général, je préfixe les champs de mes tables par 4 lettres (sauf les id), ça donnerait cela :
bureau
proprietaire
poste
ecran
avoir
Et je ferais la requête suivante :
SELECT * FROM bureau NATURAL JOIN proprietaire NATURAL JOIN poste NATURAL JOIN ecran
Je pense qu'il va y avoir des ambiguïtés sur certains champs de même nom qui sont présents dans différentes tables si tu mets SELECT *
SELECT *
FROM bureau INNER JOIN avoir USING (id_bureau)
INNER JOIN poste USING (id_poste)
INNER JOIN ecran USING (id_ecran)
INNER JOIN proprio USING (id_proprio);
Un INNER JOIN serait plus approprié ici. Question bête, tes tables sont-elles remplies ?
Une ambiguité pourrait être si signalé si il était par exemple question d'une requête suivante :
SELECT date_achat FROM poste INNER JOIN ecran
Deux noms de champs identiques issus de deux tables différentes ne provoquera pas une ambiguïté comme on l'entend sous mysql lors d'une sélection de l'intégralité des champs (*).
En revanche, je rejoins tout à fait dadouduck sur le fait de respecter une certaine convention dans le nommage de tes noms de champs. Cela te permettra une lecture plus rapide de ta bdd.
Bonjour,
Merci pour vos réponses.
Alors j'ai modifié le nom de toutes mes tables pour éviter les ambiguïtés, et j'ai entrer cette requête, mais elle me renvoi un résultat vide :
SELECT *
FROM bureau INNER JOIN avoir USING (id_bureau)
INNER JOIN poste USING (id_poste)
INNER JOIN ecran USING (id_ecran)
INNER JOIN proprio USING (id_proprio);
Pourtant j'ai bien des données dans mes tables. Je n'arrive pas à comprendre pourquoi.
EDIT
En tapant cette requête ça marche :
SELECT * FROM bureau NATURAL JOIN proprietaire NATURAL JOIN poste NATURAL JOIN ecran
Merci beaucoup pour votre aide.