Aller au contenu


Photo

NOT IN (SELECT)


  • Please log in to reply
3 replies to this topic

#1 tinou

tinou

    Maniaque du clavier

  • Membres
  • PipPipPipPip
  • 604 Messages :
  • Configuration:MacPro 8x3Ghz
    8 Go
    2x500 Go
    Nvidia 8800GT
    BT-AP
    2x20" cinema display
  • Sexe:Masculin
  • Localisation:Nantes
  • Passions:trop

Posté 17 juin 2011 - 09:52

Salut à tous,

Ca fait un bail !

Je suis bloqué sur un requête SQL, pour faire simple, je souhaite retrouver tous les dossiers qui n'ont pas de documents de type "Library::Eso"

SELECT c.id, c.`code` from `customer_files` c WHERE c.`id` NOT IN (SELECT d.`customer_file_id` FROM `documents` d WHERE d.`type` = "Library::Eso")

0 résultat

J'ai donc scindé les requêtes :

SELECT c.id, c.`code` from `customer_files` c

1300 résultats OK

SELECT d.`customer_file_id` FROM `documents` d WHERE d.`type` = "Library::Eso"

802 résultats OK

SELECT c.`code` from `customer_files` c LEFT JOIN `documents` d ON c.id = d.customer_file_id where d.`type` = "Library::Eso"

797 résultats OK

Donc là je sèche... j'ai même essayé une autre technique :

SELECT c.`code` from `customer_files` c LEFT OUTER JOIN `documents` d ON c.id = d.customer_file_id where d.`type` = "Library::Eso" HAVING COUNT(d.customer_file_id) = 0

0 résultat...

Si quelqu'un pouvait m'éclairer sur l'erreur commise... merci d'avance :)
A modern paradox is that : it's simpler to create complex interface because it's so complex to simplify them

#2 BorakLeRouge

BorakLeRouge

    Hamster d'or (dort ?)

  • Membres
  • PipPipPipPipPipPipPip
  • 3 946 Messages :
  • Configuration:Mac Mini Core i7 - 16Go - 2To Hybride
  • Sexe:Masculin
  • Localisation:Cormeilles en Parisis.rb
  • Passions:Macintosh, Photo, Haute-fidélité, Ski, Roller, Call of Duty, Tactical Ops, Counter Strike, Worms 1

Posté 17 juin 2011 - 11:36

Je préfère une utilisation de Exists :

SELECT c.id, c.`code` 
from `customer_files` c 
WHERE NON EXISTS  
 (SELECT * 
	FROM `documents` d 
	WHERE c.`id`= d.`customer_file_id` 
	AND d.`type` = "Library::Eso")

Je fais mes sauvegardes sur NSA-Cloud !

Au bout de 10 ans, le vieux MacPro vient de laisser sa place à un MacMini i7...


#3 tinou

tinou

    Maniaque du clavier

  • Membres
  • PipPipPipPip
  • 604 Messages :
  • Configuration:MacPro 8x3Ghz
    8 Go
    2x500 Go
    Nvidia 8800GT
    BT-AP
    2x20" cinema display
  • Sexe:Masculin
  • Localisation:Nantes
  • Passions:trop

Posté 17 juin 2011 - 11:47

Faut admettre que c'est efficace... une fois remplacé la coquille de "NON" pour "NOT"

Ca fonctionne plutôt bien et plutôt vite.

Merci bien ! J'aurai quand même bien aimé savoir pourquoi ca ne fonctionne ni avec NOT IN ni avec HAVING COUNT... <_<

Ce message a été modifié par tinou - 17 juin 2011 - 11:47 .

A modern paradox is that : it's simpler to create complex interface because it's so complex to simplify them

#4 tinou

tinou

    Maniaque du clavier

  • Membres
  • PipPipPipPip
  • 604 Messages :
  • Configuration:MacPro 8x3Ghz
    8 Go
    2x500 Go
    Nvidia 8800GT
    BT-AP
    2x20" cinema display
  • Sexe:Masculin
  • Localisation:Nantes
  • Passions:trop

Posté 17 juin 2011 - 12:11

Pour les curieux, j'ai la réponse !


Le NOT IN n'aime pas les NULL... personne n'aime les nuls, mais pas autant que NOT IN !

Donc voila le code qui va bien !

SELECT c.id, c.`code` 
FROM `customer_files` c 
WHERE 
   c.`id` NOT IN (SELECT d.`customer_file_id` 
   FROM `documents` d 
   WHERE 
      d.`type` = "Library::Eso"
      AND d.`customer_file_id` IS NOT NULL)


Merci encore !

Bonne journée
A modern paradox is that : it's simpler to create complex interface because it's so complex to simplify them




0 utilisateur(s) en train de lire ce sujet

0 membre(s), 0 invité(s), 0 utilisateur(s) anonyme(s)