Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1409 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  requete imbrique <> all

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

requete imbrique <> all

n°1642783
JulienOrio​n666
Posté le 14-11-2007 à 15:11:19  profilanswer
 

Bonjour,
 
Je voudrais selectioner toute les personne ne faisait pas partie d'une liste retourné par une requete (le contraire de IN en sorte toutes les personne qui ne sont PAS dans la liste.
J'ai fait cette requette :
 
"SELECT * FROM Personnes WHERE  clef <> ALL (SELECT distinct clef_personne FROM carriere WHERE    Profession <> 12 )  ) "
 
ca marche mais c'est extremement long y a t'il un autre moyen de proceder.

mood
Publicité
Posté le 14-11-2007 à 15:11:19  profilanswer
 

n°1642796
anapajari
s/travail/glanding on hfr/gs;
Posté le 14-11-2007 à 15:33:14  profilanswer
 

Code :
  1. SELECT * FROM Personnes WHERE NOT EXISTS ( SELECT clef_personne FROM carriere WHERE Profession<>12 AND clef_personne = clef)

n°1642862
MagicBuzz
Posté le 14-11-2007 à 16:53:23  profilanswer
 

Si tu regardes dans ma signature, il y a un pavé sur les jointures à un endroit, qui donne une solution alternative en passant par un LEFT OUTER JOIN. Cette solution est moins lisible, mais plus rapide.
 
PS pour anapajari : select null from ... dans la sous-requête, c'est un peu mieux que d'appeler un champ de la table, puisqu'on n'a pas besoin de le connaître avec NOT EXISTS. Ou alors mets NOT IN à la place ;)

Message cité 1 fois
Message édité par MagicBuzz le 14-11-2007 à 16:54:53
n°1642863
JulienOrio​n666
Posté le 14-11-2007 à 16:53:32  profilanswer
 

c est aussi long :( (avec NOT EXISTS)

Message cité 1 fois
Message édité par JulienOrion666 le 14-11-2007 à 16:54:31
n°1642878
anapajari
s/travail/glanding on hfr/gs;
Posté le 14-11-2007 à 17:13:43  profilanswer
 

MagicBuzz a écrit :

PS pour anapajari : select null from ... dans la sous-requête, c'est un peu mieux que d'appeler un champ de la table, puisqu'on n'a pas besoin de le connaître avec NOT EXISTS. Ou alors mets NOT IN à la place ;)


NOT IN ça suxxe.
Pour le null je suis pas forcément d'accord car AMA s'il y a un index sur clef_personne ça va plus vite d'utiliser le champs.

JulienOrion666 a écrit :

c est aussi long :( (avec NOT EXISTS)


Ne manquerait-il pas des indexs dans ta base?
S'ils y sont, runstats/reorg?
 

n°1642917
MagicBuzz
Posté le 14-11-2007 à 18:05:42  profilanswer
 

Julien > Et avec la solution du left join ?
 
Anapajari > Pour le NOT IN vs NOT EXISTS, c'est ce que j'ai cru longtemps grâce à la bouse infâme qu'est Oracle. En réalité, sur tous les SGBD (y compris Oracle 10g) le NOT IN est étrangement plus rapide (et de loin) que le NOT EXISTS.
Ensuite, non, de toute façon tu peux faire tout ce que tu veux dans ton sous-select, tout ce qui est compris entre "select" et "from" est complètement ignoré par le moteur SQL. En fait, l'utilisation de null au lieu d'un nom de champ, ça ne va pas impacter grand chose (l'interpréteur à la limite, quelques nanosecondes de gagnées avec null), mais surtout, je trouve ça moins confusant pour le relecteur : le filtre effectué par le NOT EXISTS ne porte pas du tout sur les valeur "sélectionnées", mais sur le fitre de la requête.
 
En fait, tu dois te dire dans ta tête que :

Code :
  1. SELECT * FROM matable WHERE NOT EXISTS (SELECT trucmuche FROM machin WHERE machin.id = matable.id)


 
C'est sémantiquement :

Code :
  1. SELECT * FROM matable WHERE (machin has_not_rows WHERE machin.id = matable.id)


 
(has_not_rows est évidement un statement purement inventé par moi)
 
Imagine que tu fait un "select nom" dans ta sous-requête, alors que ton filtre porte sur "id", le relecteur peut croire que tu filtres les noms existants au lieu des id existants. Alors que select null ou select 1, le gars il pige pas, donc lit la requête jusqu'au bout ;)


Message édité par MagicBuzz le 14-11-2007 à 18:08:34

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  requete imbrique <> all

 

Sujets relatifs
[mysql] une requete = 2 insertions ... WTF ?![resolu] php et mysql : requete trop longue?
Requete sur deux tables !Requête récuperer x enregistrement tableau
[Access] Petit problème de requeteComment différencier une requête XHR ? (quel header)
problème avec un OR dans une requêtepetite aide SQL requete imbriqué
Rêquete imbriqué avec MySQLrequete VB imbrique
Plus de sujets relatifs à : requete imbrique <> all


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR