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 23/06/2008, 14h11   #1
Membre du Club
 
Inscription : mai 2008
Messages : 217
Détails du profil
Informations personnelles :
Localisation : France, Somme (Picardie)

Informations forums :
Inscription : mai 2008
Messages : 217
Points : 40
Points : 40
Envoyer un message via MSN à miketidy
Par défaut MINUS avec deux conditions

Bonjour,

Voilà j'ai un petite soucis avec une requête : je ne sais pas si cela fonctionne pas. En fait, voici ma requête :
Code :
1
2
3
4
INSERT INTO t_emetteur (code_emetteur, mois_ref, lib_emetteur, code_pays, code_secteur, code_activite, code_util, date_modification) 
          SELECT upper(code) cd, mois mr, libelle lib, code_p cdp, code_s cds, 1, 'toto', date_insert FROM dual 
          minus 
          SELECT code_emetteur cd, mois_ref mr, libelle, code_pays cdp, code_secteur cds, 1, 'SREFILIALE', date_insert FROM t_emetteur WHERE code_emetteur = code AND mois_ref = mois AND code_pays = code_p AND code_secteur = code_s;
Le problème est que le code_util (ici toto) peut être aussi "tata" donc je voulais savoir comment faire pour faire un MINUS avec deux conditions

Merci d'avance
miketidy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/06/2008, 14h38   #2
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
C'est pas mieux de faire :
Code :
1
2
3
4
INSERT INTO t_emetteur (code_emetteur, mois_ref, lib_emetteur, code_pays, code_secteur, code_activite, code_util, date_modification) 
          SELECT code_emetteur cd, mois_ref mr, libelle, code_pays cdp, code_secteur cds, 1, 'SREFILIALE', date_insert FROM t_emetteur WHERE code_emetteur = code AND mois_ref = mois AND code_pays = code_p AND code_secteur = code_s
WHERE (...) NOT IN (upper(code) cd, mois mr, libelle lib, code_p cdp, code_s cds, 1, 'toto', date_insert FROM dual)
OR (...) NOT IN (upper(code) cd, mois mr, libelle lib, code_p cdp, code_s cds, 1, 'tata', date_insert FROM dual)
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/06/2008, 15h23   #3
Membre du Club
 
Inscription : mai 2008
Messages : 217
Détails du profil
Informations personnelles :
Localisation : France, Somme (Picardie)

Informations forums :
Inscription : mai 2008
Messages : 217
Points : 40
Points : 40
Envoyer un message via MSN à miketidy
Je n'y avais pas pensé je vais tester çà cela fait le même chose et c'est aussi rapide ou non?
miketidy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/06/2008, 15h31   #4
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
c'est au moins aussi rapide voir plus
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/06/2008, 15h44   #5
Membre du Club
 
Inscription : mai 2008
Messages : 217
Détails du profil
Informations personnelles :
Localisation : France, Somme (Picardie)

Informations forums :
Inscription : mai 2008
Messages : 217
Points : 40
Points : 40
Envoyer un message via MSN à miketidy
Je n'arrive pas à le tester je met quoi à la pace de point de suspension?
miketidy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/06/2008, 15h52   #6
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
Ce qui sert à exclure les lignes... je peux pas savoir pour toi :o

Et puis, même le MINUS ne fonctionnera jamais puisque SREFILIALE est forcément ni toto ni tata. Qu'est ce que tu veux faire exactement ?
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/06/2008, 15h55   #7
Membre du Club
 
Inscription : mai 2008
Messages : 217
Détails du profil
Informations personnelles :
Localisation : France, Somme (Picardie)

Informations forums :
Inscription : mai 2008
Messages : 217
Points : 40
Points : 40
Envoyer un message via MSN à miketidy
, en fait j'ai oublié de remplacer SREFILIALES par toto aussi, je reprend le code
Code :
1
2
3
4
INSERT INTO t_emetteur (code_emetteur, mois_ref, lib_emetteur, code_pays, code_secteur, code_activite, code_util, date_modification) 
          SELECT upper(code) cd, mois mr, libelle lib, code_p cdp, code_s cds, 1, 'toto', date_insert FROM dual 
          minus 
          SELECT code_emetteur cd, mois_ref mr, libelle, code_pays cdp, code_secteur cds, 1, 'toto', date_insert FROM t_emetteur WHERE code_emetteur = code AND mois_ref = mois AND code_pays = code_p AND code_secteur = code_s;
Si le code_util pour rester toto, ceci ne poserai aps de problème mais là il peut y avoir un autre code_util tata par exemple.
Tu comprends mieux?
miketidy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/06/2008, 16h44   #8
Membre du Club
 
Inscription : mai 2008
Messages : 217
Détails du profil
Informations personnelles :
Localisation : France, Somme (Picardie)

Informations forums :
Inscription : mai 2008
Messages : 217
Points : 40
Points : 40
Envoyer un message via MSN à miketidy
Ta solution ne veut pas fonctionner, elle tombe en erreur...
peut-être parce qu'il y a deux clauses where...
miketidy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/06/2008, 17h11   #9
Membre du Club
 
Inscription : mai 2008
Messages : 217
Détails du profil
Informations personnelles :
Localisation : France, Somme (Picardie)

Informations forums :
Inscription : mai 2008
Messages : 217
Points : 40
Points : 40
Envoyer un message via MSN à miketidy
Help me svp
miketidy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/06/2008, 18h50   #10
McM
Expert Confirmé Sénior
 
Inscription : juillet 2003
Messages : 3 459
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 3 459
Points : 4 226
Points : 4 226
Il manque le select dans le NOT IN
__________________
More Code : More Bugs. Less Code : Less Bugs
McM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/06/2008, 01h00   #11
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
bah non, les listes de valeurs fonctionne

Sinon, le message d'erreur on doit le deviner ?
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/06/2008, 09h29   #12
Membre du Club
 
Inscription : mai 2008
Messages : 217
Détails du profil
Informations personnelles :
Localisation : France, Somme (Picardie)

Informations forums :
Inscription : mai 2008
Messages : 217
Points : 40
Points : 40
Envoyer un message via MSN à miketidy
Désolé, en fait il y a une erreur de syntaxe au niveau du deuxième WHERE mais je ne comprend pas pourquoi :

Code :
1
2
3
4
INSERT INTO t_emetteur (code_emetteur, mois_ref, lib_emetteur, code_pays, code_secteur, code_activite, code_util, date_modification) 
          SELECT code_emetteur cd, mois_ref mr, libelle, code_pays cdp, code_secteur cds, 1, 'SREFILIALE', date_insert FROM t_emetteur WHERE code_emetteur = code AND mois_ref = mois AND code_pays = code_p AND code_secteur = code_s
WHERE (code_emetteur) NOT IN (upper(code) cd, mois mr, libelle lib, code_p cdp, code_s cds, 1, 'toto', date_insert FROM dual)
OR (code_emetteur) NOT IN (upper(code) cd, mois mr, libelle lib, code_p cdp, code_s cds, 1, 'tata', date_insert FROM dual)
miketidy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/06/2008, 09h43   #13
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
Mais QUELLE ERREUR ???
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/06/2008, 09h52   #14
Membre du Club
 
Inscription : mai 2008
Messages : 217
Détails du profil
Informations personnelles :
Localisation : France, Somme (Picardie)

Informations forums :
Inscription : mai 2008
Messages : 217
Points : 40
Points : 40
Envoyer un message via MSN à miketidy
C'est bon j'ai trouvé cela fonctionne mais j'ai modifié des choses voilà le résultat :

Code :
1
2
3
INSERT INTO t_emetteur (code_emetteur, mois_ref, lib_emetteur, code_pays, code_secteur, code_activite, code_util, date_modification) 
          SELECT upper(code) cd, mois mr, libelle, code_p cdp, code_s cds, 1, 'SREFILIALE', date_insert FROM dual          
WHERE (code, mois) NOT IN (SELECT code_emetteur cd, mois_ref mr FROM t_emetteur);
Merci beaucoup
miketidy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/06/2008, 09h57   #15
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
orafrance 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 03h14.


 
 
 
 
Partenaires

Hébergement Web