Précédent   Forum des professionnels en informatique > Bases de données > Langage SQL
Langage SQL Forum d'entraide sur le langage SQL et sur les questions liées à la conception de schéma (DDL). Cours SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 27/12/2011, 11h43   #1
Invité de passage
 
Inscription : mars 2008
Messages : 25
Détails du profil
Informations forums :
Inscription : mars 2008
Messages : 25
Points : 2
Points : 2
Par défaut Intersection entre deux tables

Bonjour,

J'ai 2 tables A (personne) et B (affectation).
Dans la première table A, j'ai les champs "identifiant", "nom" et "prenom".
Dans la 2ème tabe B, j'ai les champs "identifiant", "statut", "dateArrivee" et "dateDepart".

j'aimerais afficher un tableau dans lequel on a : "identifiant", "nom", "prenom" et "statut"

sachant que la colonne statut doit afficher le statut actuel. S'il n'y a pas de statut elle affiche "-" .

J'ai essayé de faire la requête suivante :
Code :
1
2
3
SELECT DISTINCT a.identifiant, a.nom, a.prenom, b.statut
  FROM A a, B b
 WHERE a.identifiant = b.identifiant
Mais dans ce cas j'ai plusieurs lignes pour la même personne avec ces différents statuts, alors que j'ai besoin qu'une seule ligne pour chaque personne avec son statut actuel s'il existe.

J'ai essayé aussi la requête suivante :
Code :
1
2
3
4
5
SELECT DISTINCT a.identifiant, a.nom, a.prenom, b.statut
  FROM A a, B b
 WHERE a.identifiant = b.identifiant
   AND b.dateArrivee <= 'dateAujourdhui'
   AND b.dateDepart  >= 'dateAujourdhui'
Mais dans ce cas si une personne n'a pas de statut actuellement, il ne sera pas affiché alors que j'ai besoin de l'afficher même s'il n'a pas de statut et en mettant dans ce cas un "-" dans la colonne statut.

Que dois-je faire ?
khayem est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/12/2011, 11h48   #2
Expert Confirmé
 
Homme
Inscription : mai 2002
Messages : 1 654
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2002
Messages : 1 654
Points : 2 656
Points : 2 656
Bonjour,

Déjà prennez connaissance des différents type de jointure existant : http://sqlpro.developpez.com/cours/sqlaz/jointures/

Ensuite :
Citation:
J'ai essayé de faire la requête suivante :
select distinct a.identifiant, a.nom, a.prenom, b.statut from A a, B b where a.identifiant = b.identifiant : Mais dans ce cas j'ai plusieurs lignes pour la même personne avec ces différents statuts, alors que j'ai besoin qu'une seule ligne pour chaque personne avec son statut actuel s'il existe.
Que veux dire statut actuel ? comment le reconnait-on ?


Quel est votre SGBD ?
punkoff est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/12/2011, 11h57   #3
Invité de passage
 
Inscription : mars 2008
Messages : 25
Détails du profil
Informations forums :
Inscription : mars 2008
Messages : 25
Points : 2
Points : 2
Le statut actuel c'est la valeur du champs statut dans la table B avec une valeur du champs "dateArrivee" inférieur à la date d'aujourd'hui et une valeur du champs "dateDepart" supérieur à la date d'aujourd'hui.
khayem est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/12/2011, 12h00   #4
Expert Confirmé
 
Homme
Inscription : mai 2002
Messages : 1 654
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2002
Messages : 1 654
Points : 2 656
Points : 2 656
oki,

Dans ce cas lisez la partie jointure externe de la doc liker au-dessus, et adaptez votre 2eme requête en conséquent.

Si ca ne marche pas, postez votre nouvelle requête
punkoff est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/12/2011, 17h17   #5
Invité de passage
 
Inscription : mars 2008
Messages : 25
Détails du profil
Informations forums :
Inscription : mars 2008
Messages : 25
Points : 2
Points : 2
Effectivement, il fallait utiliser une jointure externe. Merci pour le lien.
khayem est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 18h57.


 
 
 
 
Partenaires

Hébergement Web