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 11/07/2011, 11h03   #1
Membre à l'essai
 
Inscription : novembre 2009
Messages : 93
Détails du profil
Informations forums :
Inscription : novembre 2009
Messages : 93
Points : 22
Points : 22
Par défaut Problème jointure basique

Bonjour à tous, j'ai un petit problème de jointure que je n'arrive pas à résoudre.
Dans la ma table ACHAT j'ai un champs DEMANDE_ID.
J'ai une table DEMANDE avec DEMANDE_ID, LIBELLE

Je veux faire un
Code :
1
2
3
4
 
SELECT a.champ1, a.champs2, a.champ3, b.LIBELLE
FROM ACHAT a, DEMANDE b
WHERE a.DEMANDE_ID = b.DEMANDE_ID
Le problème c'est que j'ai 3 libellés dans la table DEMANDE et du coup le résultat me multiplie les lignes par 3.

J'essaye avec un (+) de chaque côté mais ça fonctionne pas

Ça doit pas être grand chose, mais si quelqu'un peut me dépanner

Merci.
Tonii est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/07/2011, 11h11   #2
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 684
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2008
Messages : 5 684
Points : 10 431
Points : 10 431
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
DEMANDE_ID n'est pas défini en tant que clef primaire de la table DEMANDE ?
Bizarre.
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/07/2011, 11h35   #3
Membre à l'essai
 
Inscription : novembre 2009
Messages : 93
Détails du profil
Informations forums :
Inscription : novembre 2009
Messages : 93
Points : 22
Points : 22
Merci Waldar de ta réponse.
Effectivement lors de la création de la table DEMANDE, le champ DEMANDE_ID n'est pas défini en clé primaire.

Ca provient de la?

Si oui je peux modifier le champ en primarykey avec un ALTER Table?

Merci d'avance
Tonii est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/07/2011, 11h38   #4
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 684
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2008
Messages : 5 684
Points : 10 431
Points : 10 431
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
Il faut d'abord nettoyer votre table de ses doublons : vous ne pourrez pas définir une contrainte si elle n'est pas vérifiable.
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/07/2011, 11h41   #5
Membre à l'essai
 
Inscription : novembre 2009
Messages : 93
Détails du profil
Informations forums :
Inscription : novembre 2009
Messages : 93
Points : 22
Points : 22
La plupart des tables n'ont pas beaucoup de données, voir pas du tout pour certaines.

Donc c'est possible alors?
Ca doit etre un
Code :
ALTER TABLE DEMANDE MODIFY DEMANDE_ID
mais après?
??
Tonii est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/07/2011, 11h44   #6
Membre à l'essai
 
Inscription : novembre 2009
Messages : 93
Détails du profil
Informations forums :
Inscription : novembre 2009
Messages : 93
Points : 22
Points : 22
Je viens de créer la PRIMARY KEY sur le champ DEMANDE_ID de la table DEMANDE, et ca change rien au niveau du résultat de la requête...
J'ai toujours mon nombre de lignes multiplié par 3, c'est à dire le nombre de type de demande...

Je tiens à préciser que dans ma requête j'ai des OR.
En fait je fais une recherche sur plusieurs champs de ma table ACHAT..

Est-ce que ca pet provenir de la ?
Tonii est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/07/2011, 11h54   #7
Expert Confirmé Sénior
 
Avatar de mnitu
 
Homme Marius Nitu
Ingénieur développement logiciels
Inscription : octobre 2007
Messages : 3 311
Détails du profil
Informations personnelles :
Nom : Homme Marius Nitu
Localisation : France, Marne (Champagne Ardenne)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2007
Messages : 3 311
Points : 5 810
Points : 5 810
Citation:
Envoyé par Waldar Voir le message
Il faut d'abord nettoyer votre table de ses doublons : vous ne pourrez pas définir une contrainte si elle n'est pas vérifiable.
Dans le cas général c'est possible mais...
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
 
Connected TO Oracle DATABASE 10g Enterprise Edition Release 10.2.0.4.0 
Connected AS mni
 
SQL> CREATE TABLE t_sans_pk(x int);
 
TABLE created
 
SQL> INSERT INTO t_sans_pk(x) VALUES(1);
 
1 row inserted
 
SQL> INSERT INTO t_sans_pk(x) VALUES(1);
 
1 row inserted
 
SQL> ALTER TABLE t_sans_pk ADD constraint t_sans_pk_pk PRIMARY KEY(x);
 
ALTER TABLE t_sans_pk ADD constraint t_sans_pk_pk PRIMARY KEY(x)
 
ORA-02437: impossible de valider (MNI.T_SANS_PK_PK) - violation de la clé primaire
 
SQL> ALTER TABLE t_sans_pk ADD constraint t_sans_pk_pk PRIMARY KEY(x) deferrable novalidate;
 
TABLE altered
 
SQL>
mnitu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/07/2011, 13h09   #8
Membre à l'essai
 
Inscription : novembre 2009
Messages : 93
Détails du profil
Informations forums :
Inscription : novembre 2009
Messages : 93
Points : 22
Points : 22
C'est bon merci à vous j'ai réussi à faire ce que je voulais.

Concernant la jointure mon problème venait du fait que j'avais pas mal de
Code :
1
2
 
OR champ1 LIKE '%var%' OR champ2 LIKE '%var%' OR champ3 LIKE '%var%'
Et fallait mettre entre parenthèse les or

Merci à vous!
Tonii est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/07/2011, 14h12   #9
Membre à l'essai
 
Inscription : novembre 2009
Messages : 93
Détails du profil
Informations forums :
Inscription : novembre 2009
Messages : 93
Points : 22
Points : 22
J'ai une derniere question:
Si dans une jointure on a une valeur null on a pas de résultat sur la requete entiere?
Tonii est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/07/2011, 10h22   #10
Membre habitué
 
Avatar de tfc3146
 
Homme Robert Labrousse
Développeur décisionnel
Inscription : février 2009
Messages : 79
Détails du profil
Informations personnelles :
Nom : Homme Robert Labrousse
Localisation : France

Informations professionnelles :
Activité : Développeur décisionnel
Secteur : Boutique - Magasin

Informations forums :
Inscription : février 2009
Messages : 79
Points : 134
Points : 134
Bonjour,

Sur une clé primaire tu ne peux pas avoir de valeurs nulles. Par contre ta clé étrangère DEMANDE_ID de ta relation ACHAT peut contenir des valeurs nulles c'est ta question ?
Dans ce cas, avec une jointure interne tu ne pourras pas ramener ces lignes
__________________
Citation:
C'est en faisant n'importe quoi qu'on devient n'importe qui
Si un message vous a aidé, n'hésitez pas à mettre +1
tfc3146 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 23h44.


 
 
 
 
Partenaires

Hébergement Web