Exclure des résultats sql oracle

Exclure des résultats sql oracle - SQL/NoSQL - Programmation

Marsh Posté le 13-10-2009 à 15:18:36    

Bonjour,
 
J'ai un petit soucis de script sql que je n'arrive pas à le résoudre, je fais donc appel à votre aide. Voila ma situtation : j'ai 3 tables : une table client, une table ressource et une table session.
 
Dans la table session j'ai certaines de ces ressources qui sont inscrites pour certains de ces clients.
 
Mon but serait d'afficher toutes les ressources d'un client qui ne sont pas incrites (donc les exclure) dans la table session.  
 
Dans ma table session j'ai une colonne qui se nomme idres et qui fait référence à des ressources qui sont contenues dans la table ressource (idresso).
 
Voila ce que j'ai essayé de faire mais ça m'exclus pas les données qui sont incrites dans la table session. Dans ma requête j'ai inclus cette contrainte :
 

Code :
  1. select codebarre, quantity, ... from ressource, session, ...
  2. where ...
  3. and a.ressource.idresso <> a.session.idres


 
cette contrainte n'enlève pas dans l'affichage les ressources contenues dans la table session à l'affichage. Par contre si je remplace <> par un = il m'affiche bien celle qui ont le même id. Je vois pas trop comment résoudre ce problème.
 
A l'aide, s'il vous plait.

Reply

Marsh Posté le 13-10-2009 à 15:18:36   

Reply

Marsh Posté le 13-10-2009 à 15:31:04    

Code :
  1. SELECT champs FROM ressource WHERE ressource.idresso NOT IN (SELECT idres FROM session)


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 13-10-2009 à 15:51:27    

Salut Harkonnen,
 
Super merci pour ton aide. Ca marche impec !
 
@+

Reply

Marsh Posté le 13-10-2009 à 17:51:04    

Harkonnen a écrit :

Code :
  1. SELECT champs FROM ressource WHERE ressource.idresso NOT IN (SELECT idres FROM session)



Code :
  1. SELECT champs
  2. FROM ressource LEFT OUTER JOIN  session ON (ressource.idresso = session.idres)
  3. WHERE session.idres IS NULL;


 
[:doc petrus]


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 14-10-2009 à 09:13:13    

j'y ai pensé après coup au left outer join :D


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 14-10-2009 à 12:46:54    

Salut,
 
Quelle est la façon "la plus propre" : outer join ou un simple not in ?
En tout cas je vous remercie pour votre aide.

Reply

Marsh Posté le 14-10-2009 à 13:15:50    

l'Outer Join est largement plus propre, et surement plus performant


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 14-10-2009 à 13:49:14    

Plus propre je sais pas, tout dépend ce que tu veux dire par "propre" (en l'occurrence la version avec sous-requête est plus lisible pour les gens peu habitués), mais plus performant il y a des chances.

Message cité 1 fois
Message édité par skeye le 14-10-2009 à 13:49:54

---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 14-10-2009 à 13:50:04    

Si c'est plus propre :o
les sous requêtes ça pue du cul :o


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 14-10-2009 à 14:00:48    

skeye a écrit :

Plus propre je sais pas, tout dépend ce que tu veux dire par "propre" (en l'occurrence la version avec sous-requête est plus lisible pour les gens peu habitués), mais plus performant il y a des chances.


Plus performant c'est sûr si on utilise un index ! Le guide du tuning oracle (éditions o'reilly) l'explique assez facilement :

Remember that indexes can tell you what is in a table but not what is not in a table. All references to NOT, !=, and <> disable index usage.

Reply

Marsh Posté le 14-10-2009 à 14:00:48   

Reply

Marsh Posté le 14-10-2009 à 14:02:20    

couak a écrit :


Plus performant c'est sûr si on utilise un index ! Le guide du tuning oracle (éditions o'reilly) l'explique assez facilement :

Remember that indexes can tell you what is in a table but not what is not in a table. All references to NOT, !=, and <> disable index usage.



Je sais - d'ailleurs il suffit de réfléchir un peu, pas besoin de bouquin pour ça :D


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 14-10-2009 à 14:36:07    

le bon sens et la logique ne fonctionnent pas toujours :)

Reply

Sujets relatifs:

Leave a Replay

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