requete sql not in [ resolu - sql help ] - SQL/NoSQL - Programmation
Marsh Posté le 20-07-2005 à 13:54:20
Les anciennes versions de mySql ne connaissent pas les sous-requêtes.
Ca doit être ton problème ...
La solution est de passer par des jointures externes.
SELECT *
FROM prix
WHERE nom_maison='Ghisoni'
AND date_1 NOT IN (
SELECT date_ariv
FROM location
WHERE nom_maison='Ghisoni')
AND date_2 NOT IN (
SELECT date_dpar
FROM location
WHERE nom_maison='Ghisoni')
ORDER BY date_1;
devient qqch comme :
SELECT *
FROM prix p
LEFT JOIN location l1 on l1.date_ariv = prix.date_1
LEFT JOIN location l2 on l2.date_dpar = prix.date_2
WHERE p.nom_maison='Ghisoni'
AND l1.nom_maison='Ghisoni'
AND l2.nom_maison='Ghisoni'
AND l1.date_ariv IS NULL
AND l2.date_ariv IS NULL
ORDER BY p.date_1;
(jointures externes, et comparaisons à NULL)
Il se peut qu'il y ait des erreurs, ça fait quelque temps que j'utilise plus mySql.
Marsh Posté le 20-07-2005 à 15:47:59
je confirme, c'est pas un pb de not in, mais de requêtes imbriquées. Elles sont supportées depuis la version MySql 4.x
Marsh Posté le 21-07-2005 à 20:59:29
merci a tous, j'ai utiliser LEFT JOIN et sa marche après une petite modif de la base de donnée
Marsh Posté le 20-07-2005 à 06:56:26
Bonjour tout le monde, voila je doit finir mon site pour mon stage et je me heurte a un probleme ... un gros probleme puisque lorsque j'heberge mon serveur mysql en local je n'ai aucun soucis avec mes requetes SQL , sauf que quand je passe sur free mes requetes avec NOT IN NE passe plus....
Voici le code php :
$requete="SELECT * FROM prix WHERE nom_maison='".$maison."' AND date_1 MINUS ( SELECT date_ariv FROM location WHERE nom_maison='".$maison."') AND date_2 MINUS ( SELECT date_dpar FROM location WHERE nom_maison='".$maison."') ORDER BY date_1";
voici ce que sa donne quand c'est envoyer au serveur :
SELECT * FROM prix WHERE nom_maison='Ghisoni' AND date_1 NOT IN ( SELECT date_ariv FROM location WHERE nom_maison='Ghisoni') AND date_2 NOT IN ( SELECT date_dpar FROM location WHERE nom_maison='Ghisoni') ORDER BY date_1
et voila l'erreur que je rentre ça sous php my admin avec free ( alors que chez moi ça marche ):
MySQL a répondu:Documentation
#1064 - You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT date_ariv FROM location WHERE nom_maison='Ghisoni') AND
Bref le not in ne passe pas dutout j'arrive pas a savoir pourquoi, alors si vous pouviez m'aider je vous serai vraiment reconnaissant. Merci beaucoup car là j'en peu plus
Ps : désoler pour la syntaxe surement mauvaise, et ma logique surement tiré par les cheveux...
Message édité par Kojima_ le 21-07-2005 à 21:01:32