Page 1 sur 2
Requête not in qui ne passe pas
Posté : 21 févr. 2006, 12:50
par SwiTz
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 ?
Posté : 21 févr. 2006, 12:53
par zeus
Quelle est la version de MySQL ?
Les sous-requetes ne sont supportées que depuis la 4.1
Posté : 21 févr. 2006, 12:54
par mc
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)
Posté : 21 févr. 2006, 12:58
par albat
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
Posté : 21 févr. 2006, 14:18
par SwiTz
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 ?
Posté : 21 févr. 2006, 15:11
par zeus
Je ne pense pas mais tu peux toujours faire un BAK pour parer à toute éventualité
Posté : 24 févr. 2006, 11:27
par SwiTz
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 ?
Posté : 24 févr. 2006, 11:40
par Hermès
Posté : 24 févr. 2006, 11:49
par Cyrano
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;
Posté : 24 févr. 2006, 11:51
par SwiTz
Que signifie l'opérateur <> ?
Posté : 24 févr. 2006, 11:58
par Cyrano
en SQL, <> correspond à != en PHP : différent de
Posté : 24 févr. 2006, 12:26
par SwiTz
Hélas la requête que tu m'as donné ne renvoie rien :s
Posté : 24 févr. 2006, 12:33
par Cyrano
Es-tu absolument certain qu'il existe bien des résultats correpondant à ta recherche ?
Posté : 24 févr. 2006, 12:50
par SwiTz
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)
Posté : 24 févr. 2006, 13:20
par Cyrano
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;