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 05/10/2011, 09h34   #1
Nouveau Membre du Club
 
Homme
Développeur Java
Inscription : mars 2007
Messages : 111
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur Java

Informations forums :
Inscription : mars 2007
Messages : 111
Points : 32
Points : 32
Par défaut Clés inexistantes dans une table

Bonjour,

Je cale sur un problème sans doute simple, mais je n'y parviens pas...

Dans un traitement de masse, je reçois une liste de clés d'une table. Il m'est demandé de remonter les clés inexistantes.

Pour faire simple, j'ai table T dont la colonne des clés est classiquement OID.

Un fichier est produit, il s'agit d'une simple colonne avec a, b et c pour valeurs, en admettant que c est inexistante.

J'ai donc crée la requête suivante :

Code :
1
2
3
4
5
6
7
8
9
 
SELECT OID FROM T
WHERE
OID IN ('a', 'b', 'c') AND
OID NOT IN (
	SELECT OID FROM T
	WHERE
	OID IN ('a', 'b', 'c')
	)
Ça ne me remonte rien. J'ai cherché sur le forum, j'ai trouvé les commandes MINUS, EXISTS et autres, mais je n'y arrive vraiment pas.

Un petit coup de main serait le bienvenu, pour lequel je vous remercie par avance.
DomIII est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/10/2011, 09h42   #2
Membre confirmé
 
Homme Grégoire MARTIN
Ingénieur développement logiciels
Inscription : janvier 2011
Messages : 128
Détails du profil
Informations personnelles :
Nom : Homme Grégoire MARTIN
Âge : 32
Localisation : France, Hauts de Seine (Île de France)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : Finance

Informations forums :
Inscription : janvier 2011
Messages : 128
Points : 225
Points : 225
Bonjour ,


Je pense que ta requête ne retournera jamais rien :

Sélectionne moi les OID parmi a, b ,c mais qui ne sont pas a, b ou c


En fait si j'ai bien compris , ce serait plutôt dans ce style :

parmi la liste a,b,c dis moi quelles sont les valeurs absentes de la table T ?
__________________
Cordialement.
ORA-007 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/10/2011, 09h49   #3
Nouveau Membre du Club
 
Homme
Développeur Java
Inscription : mars 2007
Messages : 111
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur Java

Informations forums :
Inscription : mars 2007
Messages : 111
Points : 32
Points : 32
Citation:
Envoyé par ORA-007 Voir le message
Bonjour ,

En fait si j'ai bien compris , ce serait plutot dans ce style :

parmis la liste a,b,c dit moi quelles sont les valeurs absentes de la table T ?
Bonjour,

Oui, tu as très bien compris. Le tout est de trouver les OID inexistants parmi la liste.
DomIII est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/10/2011, 09h58   #4
Membre confirmé
 
Homme Grégoire MARTIN
Ingénieur développement logiciels
Inscription : janvier 2011
Messages : 128
Détails du profil
Informations personnelles :
Nom : Homme Grégoire MARTIN
Âge : 32
Localisation : France, Hauts de Seine (Île de France)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : Finance

Informations forums :
Inscription : janvier 2011
Messages : 128
Points : 225
Points : 225
Le plus simple sera d'exploiter ton fichier sous forme de table :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
WITH LISTE AS
(
SELECT 'a' AS OID FROM DUAL UNION ALL
SELECT 'b' AS OID FROM DUAL UNION ALL
SELECT 'c' AS OID FROM DUAL 
), T AS
(
SELECT 'a' AS OID FROM DUAL UNION ALL
SELECT 'b' AS OID FROM DUAL 
)
SELECT LISTE.OID
FROM   LISTE LEFT OUTER JOIN T ON LISTE.OID = T.OID
WHERE  1=1
AND    T.OID IS NULL
__________________
Cordialement.
ORA-007 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/10/2011, 10h33   #5
Nouveau Membre du Club
 
Homme
Développeur Java
Inscription : mars 2007
Messages : 111
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur Java

Informations forums :
Inscription : mars 2007
Messages : 111
Points : 32
Points : 32
Merci pour cette requête. Cependant, pourquoi 'c' n'apparaît pas dans la partie suivante :

Code :
1
2
3
4
5
6
 
T AS
(
SELECT 'a' AS OID FROM DUAL UNION ALL
SELECT 'b' AS OID FROM DUAL 
)
DomIII est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/10/2011, 10h37   #6
Membre éclairé
 
Avatar de boussafi
 
Homme
Ingénieur développement logiciels
Inscription : septembre 2007
Messages : 342
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Algérie

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : Industrie

Informations forums :
Inscription : septembre 2007
Messages : 342
Points : 397
Points : 397
Envoyer un message via Yahoo à boussafi Envoyer un message via Skype™ à boussafi
Citation:
Envoyé par DomIII Voir le message
Bonjour,


J'ai donc crée la requête suivante :

Code :
1
2
3
4
5
6
7
8
9
 
SELECT OID FROM T
WHERE
OID IN ('a', 'b', 'c') AND
OID NOT IN (
	SELECT OID FROM T
	WHERE
	OID IN ('a', 'b', 'c')
	)
c'est tout à fait normal; tu as une contradiction dans ta requete le IN et NOT IN
boussafi est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/10/2011, 10h39   #7
Membre confirmé
 
Homme Grégoire MARTIN
Ingénieur développement logiciels
Inscription : janvier 2011
Messages : 128
Détails du profil
Informations personnelles :
Nom : Homme Grégoire MARTIN
Âge : 32
Localisation : France, Hauts de Seine (Île de France)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : Finance

Informations forums :
Inscription : janvier 2011
Messages : 128
Points : 225
Points : 225
Citation:
Merci pour cette requête. Cependant, pourquoi 'c' n'apparaît pas dans la partie suivante :

Le but était bien de recupérer les OID dans la liste et pas dans la table T non ?

Il me fallait bien générer un exemple.
__________________
Cordialement.
ORA-007 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/10/2011, 10h52   #8
Nouveau Membre du Club
 
Homme
Développeur Java
Inscription : mars 2007
Messages : 111
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur Java

Informations forums :
Inscription : mars 2007
Messages : 111
Points : 32
Points : 32
Citation:
Envoyé par ORA-007 Voir le message
Le but était bien de recupérer les OID dans la liste et pas dans la table T non ?

Il me fallait bien générer un exemple.
Mais bien sûr !

Bon, je vais tester sur un échantillon de 100 OIDs, je reviens un peu plus tard pour donner les résultats.
DomIII est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/10/2011, 10h54   #9
Membre confirmé
 
Homme Grégoire MARTIN
Ingénieur développement logiciels
Inscription : janvier 2011
Messages : 128
Détails du profil
Informations personnelles :
Nom : Homme Grégoire MARTIN
Âge : 32
Localisation : France, Hauts de Seine (Île de France)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : Finance

Informations forums :
Inscription : janvier 2011
Messages : 128
Points : 225
Points : 225
AU fait quel SGBD tu utilises ?
__________________
Cordialement.
ORA-007 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/10/2011, 10h55   #10
Nouveau Membre du Club
 
Homme
Développeur Java
Inscription : mars 2007
Messages : 111
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur Java

Informations forums :
Inscription : mars 2007
Messages : 111
Points : 32
Points : 32
Oracle 10.2
DomIII 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 21h04.


 
 
 
 
Partenaires

Hébergement Web