SELECT ... FROM ... NOT IN ?

SELECT ... FROM ... NOT IN ? - SQL/NoSQL - Programmation

Marsh Posté le 31-12-2009 à 11:51:59    

Bonjour à tous, j'aimerais récupérer tous les résultats que cette requête ne donne pas, donc j'utilise un NOT IN mais ça ne fonctionne pas, j'ai une erreur : ORA-00933: La commande SQL ne se termine pas correctement
 

Code :
  1. SELECT base2.NAME, base2.FSTNAME, base2.PNT, base2.MAT, base2.COL
  2. FROM p_ctc@lkb1b2 base2
  3. NOT IN (SELECT base1.NOM, base1.PRENOM, base1.DEP, Translate(Lower(base1.NOM), 'àãâäçéèêëîïôöûüù _-^¨"''', 'aaaaceeeeiioouuu'), Translate(Lower(base1.PRENOM),'àãâäçéèêëîïôöûüù _-^¨"''','aaaaceeeeiioouuu'), base2.NAME, base2.FSTNAME, base2.PNT, base2.MAT, base2.COL, Translate(Lower(base2.NAME),'àãâäçéèêëîïôöûüù _-^¨"''','aaaaceeeeiioouuu'), Translate(Lower(base2.FSTNAME),'àãâäçéèêëîïôöûüù _-^¨"''','aaaaceeeeiioouuu')
  4.      FROM pers.AGT base1, p_ctc@lkb1b2 base2
  5.      WHERE Translate(Lower(base1.NOM), 'àãâäçéèêëîïôöûüù _-^¨"''', 'aaaaceeeeiioouuu') = Translate(Lower(base2.NAME),'àãâäçéèêëîïôöûüù _-^¨"''','aaaaceeeeiioouuu')
  6.      AND Translate(Lower(base1.PRENOM),'àãâäçéèêëîïôöûüù _-^¨"''','aaaaceeeeiioouuu') = Translate(Lower(base2.FSTNAME),'àãâäçéèêëîïôöûüù _-^¨"''','aaaaceeeeiioouuu')
  7.      ORDER BY base1.NOM, base1.PRENOM);


Merci de votre aide.

Reply

Marsh Posté le 31-12-2009 à 11:51:59   

Reply

Marsh Posté le 31-12-2009 à 11:58:10    

[:leif erikson:2]  
 
Tu veux comparer quoi à quoi ? Là ta syntaxe c'est du gros n'importe quoi..pas de where, on dirait que tu veux comparer 2 requêtes mais avec un nombre de colonne différent....

Reply

Marsh Posté le 31-12-2009 à 11:59:12    

manque le where, la condition tous ça  ... c'est vaguement n'importe quoi :o
regarde du coté des "union" et particulièrement "minus".


Message édité par anapajari le 31-12-2009 à 11:59:29

---------------
Software and cathedrals are much the same - first we build them, then we pray.
Reply

Marsh Posté le 31-12-2009 à 13:25:23    

Le problème est que je n'ai pas besoin de where.
Je dois comparer des personnes de deux bases différentes, la requête qui commence apres le not in me donne une liste des personnes présentes dans les deux bases, moi je veux récupérer les personnes qui ne sont pas présentes dans la base 1 par rapport à la base 2, et ma seule solution et de faire un not in, mais je ne sais pas quoi mettre dans la clause where ...

Reply

Marsh Posté le 31-12-2009 à 14:17:19    

Citation :

Le problème est que je n'ai pas besoin de where.


Soit

Citation :


moi je veux récupérer les personnes qui ne sont pas présentes dans la base 1 par rapport à la base 2


Pourtant ca c'est typiquement un where mal ecrit en francais. Je vais supposer que tu veux recuperer les personnes de la base 2 qui ne sont pas presentes dans la base 1. Je ne vois pas bien la difficulte, un truc du genre :

Code :
  1. SELECT base2.truc
  2. FROM p_ctc@lkb1b2 base2
  3. WHERE NOT EXISTS ( SELECT NULL FROM pers.AGT base1 WHERE tout ton merdier)


me semble largement suffisant.
 
==> Edit : confondu base1 et base2, je remet dans le bon sens.


Message édité par fred777888999 le 31-12-2009 à 14:21:48
Reply

Marsh Posté le 31-12-2009 à 14:25:58    

Ou alors, on se sert des trucs qui existent et qui sont fait pour ça

Code :
  1. SELECT base2.truc FROM p_ctc@lkb1b2 base2
  2. minus
  3. SELECT base1.truc FROM base1


Message édité par anapajari le 31-12-2009 à 14:26:10

---------------
Software and cathedrals are much the same - first we build them, then we pray.
Reply

Marsh Posté le 31-12-2009 à 14:58:23    

Minus existe dans Oracle maintenant ? :bounce:
 
T'ain merde, c'est juste quand je l'utilise plus qu'ils le mettent :o

Reply

Marsh Posté le 31-12-2009 à 15:01:13    

Je veux faire ça mais j'ai une erreur ....

Code :
  1. SELECT base2.NAME, base2.FSTNAME, base2.PNT, base2.MAT, base2.COL
  2. FROM p_ctc@lkb1b2 base2
  3. WHERE NOT EXISTS (
  4. SELECT base1.NOM, base1.PRENOM, base1.DEP, Translate(Lower(base1.NOM), 'àãâäçéèêëîïôöûüù _-^¨"''', 'aaaaceeeeiioouuu'), Translate(Lower(base1.PRENOM),'àãâäçéèêëîïôöûüù _-^¨"''','aaaaceeeeiioouuu'), SELECT base2.NAME, base2.FSTNAME, base2.PNT, base2.MAT, base2.COL, Translate(Lower(base2.NAME),'àãâäçéèêëîïôöûüù _-^¨"''','aaaaceeeeiioouuu'), Translate(Lower(base2.FSTNAME),'àãâäçéèêëîïôöûüù _-^¨"''','aaaaceeeeiioouuu')
  5. FROM pers.AGT base1, p_ctc@lkb1b2 base2
  6. WHERE Translate(Lower(base1.NOM), 'àãâäçéèêëîïôöûüù _-^¨"''', 'aaaaceeeeiioouuu') = Translate(Lower(base2.NAME),'àãâäçéèêëîïôöûüù _-^¨"''','aaaaceeeeiioouuu')
  7. AND Translate(Lower(base1.PRENOM),'àãâäçéèêëîïôöûüù _-^¨"''','aaaaceeeeiioouuu') = Translate(Lower(base2.FSTNAME),'àãâäçéèêëîïôöûüù _-^¨"''','aaaaceeeeiioouuu')
  8. ORDER BY base1.NOM, base1.PRENOM);


 
ORA-00907: Parenthèse de droite absente
 

Reply

Marsh Posté le 31-12-2009 à 15:01:44    

Ca fait 20 ans que ca existe, mais c'est les cas pour s'en servir qui sont rares.  
On a plus souvent besoin des clefs des enregistrements presents dans base2 et pas dans base2 (et si elles sont differentes, tu peux tj te brosser avec un minus) que des enregistrements eux-memes :)

Reply

Marsh Posté le 31-12-2009 à 15:02:30    

ouais, enfin tu peux aussi lire les messages d'erreur, et où trouver le manque de parenthèse...
 
sans relire la requête je parie qu'un " )" place juste avant le "order by" va résoudre l'erreur...

Reply

Marsh Posté le 31-12-2009 à 15:02:30   

Reply

Marsh Posté le 31-12-2009 à 15:04:50    

Merty => Y fout quoi ton order by dans le not exists ?
Pourquoi tu applique des translate (select) a des trucs que tu ne ramene pas ?
C'est quoi ce deuxieme select issu d'un copier coller dans la clause exists ?

Reply

Marsh Posté le 31-12-2009 à 15:07:41    

ah ouais, c'était pire que je croyais, il sait pas faire de copier coller [:magicbuzz]

Reply

Marsh Posté le 31-12-2009 à 15:19:22    

Code :
  1. SELECT base2.NAME, base2.FSTNAME, base2.PNT, base2.MAT, base2.COL
  2. FROM p_ctc@lkb1b2 base2
  3. WHERE NOT EXISTS (
  4. SELECT NULL
  5. FROM pers.AGT base1, p_ctc@lkb1b2 base2
  6. WHERE Translate(Lower(base1.NOM), 'àãâäçéèêëîïôöûüù _-^¨"''', 'aaaaceeeeiioouuu') = Translate(Lower(base2.NAME),'àãâäçéèêëîïôöûüù _-^¨"''','aaaaceeeeiioouuu')
  7. AND Translate(Lower(base1.PRENOM),'àãâäçéèêëîïôöûüù _-^¨"''','aaaaceeeeiioouuu') = Translate(Lower(base2.FSTNAME),'àãâäçéèêëîïôöûüù _-^¨"''','aaaaceeeeiioouuu'));


 
Ca fonctionne mais je n'ai pas de lignes renvoyées.

Reply

Marsh Posté le 31-12-2009 à 15:24:29    

p1, j'ai l'impression qu'il faut qu'on te mache la requete, essaye de faire un peu attention ou tu n'apprendra rien :(
Ou a tu vu que je faisais une jointure avec base 2 dans la clause exists avec mon exemple ??? Heureusement, c'est juste un copier-coller a faire. Au passage, le jour ou un not exists te renvera qq chose avec une table en jointure ouverte, fais moi signe, je change de metier.

Code :
  1. SELECT base2.NAME, base2.FSTNAME, base2.PNT, base2.MAT, base2.COL
  2. FROM p_ctc@lkb1b2 base2
  3. WHERE NOT EXISTS (
  4. SELECT NULL
  5. FROM pers.AGT base1
  6. WHERE Translate(Lower(base1.NOM), 'àãâäçéèêëîïôöûüù _-^¨"''', 'aaaaceeeeiioouuu') = Translate(Lower(base2.NAME),'àãâäçéèêëîïôöûüù _-^¨"''','aaaaceeeeiioouuu')
  7. AND Translate(Lower(base1.PRENOM),'àãâäçéèêëîïôöûüù _-^¨"''','aaaaceeeeiioouuu') = Translate(Lower(base2.FSTNAME),'àãâäçéèêëîïôöûüù _-^¨"''','aaaaceeeeiioouuu'));


Allez, bonnes fetes de fin d'annee.

Reply

Marsh Posté le 31-12-2009 à 15:32:31    

fait gaffe, y'a des gens qui travaille avec hyperfile ici, ça pourrait bien arriver :D

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed