Précédent   Forum des professionnels en informatique > Bases de données > Oracle > SQL
SQL Forum d'entraide sur le SQL pour Oracle
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 20/07/2011, 12h58   #1
Nouveau Membre du Club
 
Avatar de logiciel_const
 
Inscription : octobre 2007
Messages : 167
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 167
Points : 31
Points : 31
Par défaut Jointure avec la première ligne

Bonjour à tous,
j'ai deux table:
Pay
pay_id nom
1 N1
1 N2

et la table Loc
nom adr
N1 A1
N1 A2
N2 A6
N2 A7

je veux faire la jointure entre la table Pay et seulement avec la premiere ligne de la table Loc:
Code :
1
2
SELECT * FROM Pay pp
LEFT OUTER JOIN Loc  oc ON (oc.nom=pp.nom)
mais la ya des répétition ,en plus c'est avec toutes les lignes de loc?
comment dois-je faire?
Merci
logiciel_const est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/07/2011, 13h10   #2
Membre Expert
 
Avatar de Yanika_bzh
 
Homme Yannick
Ingénieur Etudes & Developpements
Inscription : février 2006
Messages : 1 125
Détails du profil
Informations personnelles :
Nom : Homme Yannick
Localisation : France, Deux Sèvres (Poitou Charente)

Informations professionnelles :
Activité : Ingénieur Etudes & Developpements
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : février 2006
Messages : 1 125
Points : 1 670
Points : 1 670
Faites une jointure interne (INNER JOIN) au lieu de votre jointure externe, et definissez ce qui vous permettra de caractériser votre "premiere" ligne

Genre :

Code :
1
2
3
4
5
6
7
8
 
SELECT  
   pay_id 
FROM
   pay
INNER JOIN Loc ON (Loc.nom = pay.nom)
WHERE
  Loc.adr="A1"    /* clause permettant d'avoir la premiere ligne de votre table */
Je vous conseille de rechercher les tutos sur les jointures

Bon Courage
__________________
Dans la connaissance du monde, ceux qui ne savent rien en savent toujours autant que ceux qui n'en savent pas plus qu'eux. (Pierre Dac)
Yanika_bzh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/07/2011, 13h36   #3
Nouveau Membre du Club
 
Avatar de logiciel_const
 
Inscription : octobre 2007
Messages : 167
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 167
Points : 31
Points : 31
Merci pou votre réponse , le résultat que je veux obtenir est:
pay_id nom adr
1 N1 A1
2 N2 A6
logiciel_const est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/07/2011, 13h46   #4
Membre Expert
 
Inscription : août 2008
Messages : 1 271
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 1 271
Points : 1 929
Points : 1 929
Qu'est ce que la 1ere ligne ? Est ce en triant sur adr ? D'après l'exemple oui :
Code :
1
2
3
4
5
SELECT * 
  FROM (SELECT pay.*, row_number() over (partition BY pay.nom ORDER BY Loc.adr) AS rn
          FROM pay
          JOIN Loc ON (Loc.nom = pay.nom))
 WHERE rn = 1
Rien à voir mais c'est quand même balot d'avoir placé le nom dans la table loc et pas le pay_id...
skuatamad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/07/2011, 13h47   #5
Membre Expert
 
Avatar de Yanika_bzh
 
Homme Yannick
Ingénieur Etudes & Developpements
Inscription : février 2006
Messages : 1 125
Détails du profil
Informations personnelles :
Nom : Homme Yannick
Localisation : France, Deux Sèvres (Poitou Charente)

Informations professionnelles :
Activité : Ingénieur Etudes & Developpements
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : février 2006
Messages : 1 125
Points : 1 670
Points : 1 670
Il faut donc passer par des fonctions de regroupement.

Regardez du coté du GROUP BY, ainsi que de la fonction MIN.
Vous devriez vous en sortir

Bon courage
__________________
Dans la connaissance du monde, ceux qui ne savent rien en savent toujours autant que ceux qui n'en savent pas plus qu'eux. (Pierre Dac)
Yanika_bzh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/07/2011, 18h56   #6
Nouveau Membre du Club
 
Avatar de logiciel_const
 
Inscription : octobre 2007
Messages : 167
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 167
Points : 31
Points : 31
Re, Bonjour à tous,
Merci à tous (et pardon pour cette réponse un peu en retard), mais je ne comprends pas exactement le rôle de over partition dans ce cas?
Merci
logiciel_const est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/07/2011, 09h56   #7
Membre Expert
 
Inscription : août 2008
Messages : 1 271
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 1 271
Points : 1 929
Points : 1 929
Citation:
Envoyé par logiciel_const Voir le message
mais je ne comprends pas exactement le rôle de over partition dans ce cas?
Les fonctions analytiques
skuatamad est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 04h41.


 
 
 
 
Partenaires

Hébergement Web