Différence entre deux requêtes

Différence entre deux requêtes - SQL/NoSQL - Programmation

Marsh Posté le 05-01-2010 à 08:34:10    

Bonjour à tous.
J'aimerais que cette requête :

Code :
  1. SELECT b1.NOM, b1.PRENOM
  2. FROM base1 b1, base2@lkb1b2 b2
  3. WHERE b2.dpm != '0'
  4. AND b1.COD(+) = b2.Num
  5. ORDER BY b1.NOM, b1.PRENOM;


Soit "soustraite" à celle la :

Code :
  1. SELECT b1.NOM, b1.PRENOM
  2. FROM base1 b1, base2@lkb1b2 b2
  3. WHERE b2.dpm != '0'
  4. AND b1.COD = b2.Num
  5. ORDER BY b1.NOM, b1.PRENOM;


Pour avoir la différence entre les deux.
J'ai essayé avec un not exists mais je ne pense pas que ça fonctionne car quand j'exécute la première j'ai 5782 résultats, avec la deuxième j'en ai 5181, avec mon not exist je me retrouve avec plus de 7000 lignes, alors qu'avec une requête de différence je devais avoir les 601 lignes différentes entre les deux.  
Merci de votre aide.

Reply

Marsh Posté le 05-01-2010 à 08:34:10   

Reply

Marsh Posté le 05-01-2010 à 09:46:16    

1/ la première requête effectue une jointure ouverte avec le langage abominable d'Oracle
2/ réécrit la première comme ça :
 

Code :
  1. SELECT b1.nom, b1.prenom
  2. FROM base1 b1
  3. LEFT OUTER JOIN base2@lkb1b2 b2 ON b2.num = b1.cod
  4. WHERE b2.dpm != '0'


 
3/ Rajoute "where b2.num is null" pour avoir ta réponse
 
3bis/ Ou réécrit ta requête comme suit :
 

Code :
  1. SELECT b1.nom, b1.prenom
  2. FROM base1 b1
  3. WHERE NOT EXISTS (SELECT NULL FROM base2@lkb1b2 b2 WHERE b2.dpm != '0' AND b2.num = b1.cod)


 
PS : à l'interprétation du "(+)" près, je sais jamais si c'est left ou right outer join...

Reply

Marsh Posté le 05-01-2010 à 10:21:58    

Je ne peux malheureusement pas utiliser de LEFT OUTER JOIN ...
Base trop ancienne :(

Reply

Marsh Posté le 05-01-2010 à 10:25:58    

ben il te reste le 3bis :spamafote:

Reply

Marsh Posté le 05-01-2010 à 10:40:34    

Fonctionne mais me donne pas les 601 résultats que j'attends.
Je vais procéder d'une manière différente, merci pour ton aide.

Reply

Marsh Posté le 05-01-2010 à 10:44:46    

ben inverse le base1 et le base2 dans ma requête, c'est certainement mon interprétation du (+) qui est fausse

 

parce que la logique de la requête doit te donner les résultat que tu attends


Message édité par MagicBuzz le 05-01-2010 à 10:45:11
Reply

Marsh Posté le 05-01-2010 à 13:58:44    

Avec un Minus ?  (linverse de l'INTERSECT)
 
Requête 1
MINUS
Requête 2


---------------
Don't fuck me, I'm anonymous.
Reply

Marsh Posté le 05-01-2010 à 14:32:17    

si le left outer join est pas supporté par cette version d'oracle, je doute fortement que le minus le soit. à ma connaissance, le minus est arrivé après (perso, je l'ai jamais vu, alors que j'ai déjà travaillé avec les outer join)


Message édité par MagicBuzz le 05-01-2010 à 14:32:32
Reply

Marsh Posté le 05-01-2010 à 14:41:37    

Je dirais la 8i pour le MINUS, à confirmer...


---------------
Don't fuck me, I'm anonymous.
Reply

Marsh Posté le 05-01-2010 à 14:49:38    

t'es sûr ???

Reply

Marsh Posté le 05-01-2010 à 14:49:38   

Reply

Marsh Posté le 05-01-2010 à 15:12:10    

on le retrouve dans le Oracle8i SQL Reference  : http://download.oracle.com/docs/cd [...] /index.htm
je suis pas allé chercher plus avant ;)


Message édité par E-Nyar le 05-01-2010 à 15:16:21

---------------
Don't fuck me, I'm anonymous.
Reply

Marsh Posté le 05-01-2010 à 15:52:09    

ok. bon, ben je dois confondre avec un autre truc, j'étais persuadé de jamais l'avoir utilisé sous oracle...

Reply

Sujets relatifs:

Leave a Replay

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