Requête not in qui ne passe pas

Eléphant du PHP | 88 Messages

21 févr. 2006, 12:50

Voila le problème

Code : Tout sélectionner

select distinct VL from client c,ca_gecaprod ca where c.ID_CLT = ca.ID_CLT not in (select distinct VL from client c , vendeur v where v.NOM_VENDEUR = v.VL)
Cette requête doit me permettre de sortir les éléments de gauche qui ne sont pas présent dans les éléments de droite (enfin si je me trompe) Mais la requête ne veut pas s'éxécuter. L'erreur retourner par phpmyadmin est de vérifier la syntaxe. Pourtant le syntaxe est bonne. Alors quel est le problème ?
PHP Lover "Plus je découvre PHP, plus je l'aime. Lui et moi c'est pour la vie !"

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

21 févr. 2006, 12:53

Quelle est la version de MySQL ?
Les sous-requetes ne sont supportées que depuis la 4.1
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

mc
Eléphanteau du PHP | 47 Messages

21 févr. 2006, 12:54

dans ton 2e select tu met des espaces et dans le 1er non test en jouant sur les espace.

sinon essaie en mettant comme ceci

select distinct VL from client as c, ca_gecaprod as ca where c.ID_CLT = ca.ID_CLT not in (select distinct VL from client as c, vendeur as v where v.NOM_VENDEUR = v.VL)
la programmation c'est comme une chasse au tresor !!!
sauf que les tresor c'est des bugs !!!
et que l'on ait content de pas en avoir !!!

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

21 févr. 2006, 12:58

Ce genre de requêtes ne risque-t-il pas de donner un joli produit cartésien ?... :-"
SELECT DISTINCT vl FROM client C, vendeur V WHERE V.nom_vendeur = V.vl

Eléphant du PHP | 88 Messages

21 févr. 2006, 14:18

D'accord je tourne sous MySQL 4.0.21. Normalement je peut mettre à jour MySQL, il ne devrai pas avoir de pertes pour les tables ?
PHP Lover "Plus je découvre PHP, plus je l'aime. Lui et moi c'est pour la vie !"

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

21 févr. 2006, 15:11

Je ne pense pas mais tu peux toujours faire un BAK pour parer à toute éventualité
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphant du PHP | 88 Messages

24 févr. 2006, 11:27

Voila j'ai essayé de faire une requête NOT IN elle passe mais elle n'affiche rien la voici donc

Code : Tout sélectionner

SELECT DISTINCT RS FROM ca_gecaprod ca, CLIENT c WHERE c.ID_CLT = ca.ID_CLT AND ANNEE =2004 AND ID_MOIS =1 NOT IN ( SELECT DISTINCT RS FROM ca_gecaprod ca, CLIENT c, vendeur v WHERE c.ID_CLT = ca.ID_CLT AND v.NOM_VENDEUR = c.VL AND ANNEE =2004 AND ID_MOIS =1 )
Cette requête devrai en temps normal m'afficher le nom des entreprise qui ne sont pas pris en compte dans la sous requête. Mais hélas elle ne m'affiche rien. Or si on éxécute les deux requêtes séparement, le nombre d'entreprises renvoyés dans le résultat est différents. Pourquoi ?
PHP Lover "Plus je découvre PHP, plus je l'aime. Lui et moi c'est pour la vie !"

Eléphant du PHP | 312 Messages

24 févr. 2006, 11:40

et si tu remplaces

Code : Tout sélectionner

AND ID_MOIS =1 NOT IN (
par

Code : Tout sélectionner

AND ID_MOIS =1 AND ID_MOIS NOT IN (
?

Mammouth du PHP | 19672 Messages

24 févr. 2006, 11:49

et pourquoi pas faire plus simplement :

Code : Tout sélectionner

SELECT DISTINCT RS FROM ca_gecaprod ca, CLIENT c, vendeur v WHERE c.ID_CLT = ca.ID_CLT AND ANNEE = 2004 AND ID_MOIS = 1 AND v.NOM_VENDEUR = c.VL AND v.NOM_VENDEUR <> c.VL;
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 88 Messages

24 févr. 2006, 11:51

Que signifie l'opérateur <> ?
PHP Lover "Plus je découvre PHP, plus je l'aime. Lui et moi c'est pour la vie !"

Mammouth du PHP | 19672 Messages

24 févr. 2006, 11:58

en SQL, <> correspond à != en PHP : différent de
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 88 Messages

24 févr. 2006, 12:26

Hélas la requête que tu m'as donné ne renvoie rien :s
PHP Lover "Plus je découvre PHP, plus je l'aime. Lui et moi c'est pour la vie !"

Mammouth du PHP | 19672 Messages

24 févr. 2006, 12:33

Es-tu absolument certain qu'il existe bien des résultats correpondant à ta recherche ?
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 88 Messages

24 févr. 2006, 12:50

A priori oui, pour la requête suivante

Code : Tout sélectionner

SELECT DISTINCT RS FROM ca_gecaprod ca, CLIENT c WHERE c.ID_CLT = ca.ID_CLT AND ANNEE =2004 AND ID_MOIS =1
Affichage des enregistrements 0 - 29 (10028 total, traitement: 0.3284 sec.)

Pour la suivante

Code : Tout sélectionner

SELECT DISTINCT RS FROM ca_gecaprod ca, CLIENT c, vendeur v WHERE c.ID_CLT = ca.ID_CLT AND v.NOM_VENDEUR = c.VL AND ANNEE =2004 AND ID_MOIS =1
Affichage des enregistrements 0 - 29 (9611 total, traitement: 0.0431 sec.)


Il y a une différence entre les deux, et c'est cette différence que je voudrais obtenir :'( (snif je suis nul)
PHP Lover "Plus je découvre PHP, plus je l'aime. Lui et moi c'est pour la vie !"

Mammouth du PHP | 19672 Messages

24 févr. 2006, 13:20

Alors essaye ceci:

Code : Tout sélectionner

SELECT DISTINCT RS FROM ca_gecaprod ca, CLIENT c WHERE RS NOT IN (SELECT DISTINCT RS FROM ca_gecaprod ca, CLIENT c, vendeur v WHERE c.ID_CLT = ca.ID_CLT AND v.NOM_VENDEUR = c.VL AND ANNEE = 2004 AND ID_MOIS = 1) AND c.ID_CLT = ca.ID_CLT AND ANNEE = 2004 AND ID_MOIS = 1;
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe: