|
FORUMS PROFESSIONNELS WINDEV, WEBDEV et WINDEV Mobile |
| | | | | |
Débuté par agidrol, 03 nov. 2005 15:58 - 14 réponses |
| |
| | | |
|
| |
Posté le 03 novembre 2005 - 15:58 |
Bonjour, en acces natif sur une base mysql, j'arrive pas à faire cette requete, pourtant je ne pense pas me tromper...
select personne.id_per from personne where personne.id_per not in ( select carte.id_per from carte where carte.id_per = personne.id_per)
J'essai de retrouver les 'personnes' , qui ne possedent pas de 'carte'
et j'ai comme réponse du serveur :
#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 carte . id_per from carte where carte . id_per = personn
une idée
par avance grand merci.
Antoine |
| |
| |
| | | |
|
| | |
| |
Posté le 03 novembre 2005 - 16:06 |
salut
ça me semble correct à moi aussi pourtant l'instruction Not Exist est plus rapide que Not in |
| |
| |
| | | |
|
| | |
| |
Posté le 03 novembre 2005 - 18:21 |
aucun des 2 ne fonctionne de toute facon, je ne comprends pas pourquoi
"YORK" <guest@newsgroup.fr> a écrit dans le message de news: 436a216f$1@news.pcsoft.fr...
salut
ça me semble correct à moi aussi pourtant l'instruction Not Exist est plus rapide que Not in
|
| |
| |
| | | |
|
| | |
| |
Posté le 03 novembre 2005 - 18:40 |
Antoine GIDROL a écrit :
Bonjour, en acces natif sur une base mysql, j'arrive pas à faire cette requete, pourtant je ne pense pas me tromper...
select personne.id_per from personne where personne.id_per not in ( select carte.id_per from carte where carte.id_per = personne.id_per)
J'essai de retrouver les 'personnes' , qui ne possedent pas de 'carte'
et j'ai comme réponse du serveur :
#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 carte . id_per from carte where carte . id_per = personn
la syntaxe semble correcte... as-tu essayé cette requète en direct sous mysql ?
la requète ci-dessous fonctionne bien en mysql direct (version 4.1.10.a) : select caissiers.id_caissier, libelle from caissiers where caissiers.id_caissier not in (select caissiers_encours.id_caissier from caissiers_encours)
-- Jacques Trepp Albygest - 81160 - St Juery jacques-pas de spam.trepp@free.fr (enlever '-pas de spam' pour me joindre) http://www.albygest.com |
| |
| |
| | | |
|
| | |
| |
Posté le 04 novembre 2005 - 08:44 |
La différence entre ta requête et la sienne est que dans ton cas, la sous-requête n'est pas correlée. Peut-être que la version de MySql utilisée ne supporte pas les sous-requêtes corrélées. Tu peux faire le test avec cette requête: select caissiers.id_caissier, libelle from caissiers where not exists (select * from caissiers_encours where caissier_encours.is_caissier = caissiers.id_caissier )
Frédéric. |
| |
| |
| | | |
|
| | |
| |
Posté le 04 novembre 2005 - 09:07 |
Bonjour,
Si mes souvenir sont bons, un Select dans un select ne fonctionne qu'à partir de la version MySql 4.1 Peut-être es-tu sur une version plus ancienne ?
Maintenant quand à savoir si l'accès Natif interpretre ta requête correctement....
Nous avons recontré d'autres problèmes avec cet accès natif.....et toi ?
N'hésite pas à me contacter
pas-de-spam-fred-76@hotmail.com (en enlevant 'pas-de-spam-')
Fred |
| |
| |
| | | |
|
| | |
| |
Posté le 04 novembre 2005 - 09:21 |
Bonjour,
oui, j'ai bien entendu essayer directement sur le serveur mysql, mais elle ne fonctionne pas. la version est 4.0.22 d'apres ce que je sais sur le serveur de l'hébergeur.
je viens de tester ceci aussi histoire de voir.....
mais marche pas non plus.
SELECT personne.id_per FROM personne WHERE personne.id_per NOT IN ( SELECT carte.id_per FROM carte)
Antoine
"jackt81" <jacques.trepp-nospam@free.fr> a écrit dans le message de news: 436a385c$1@news.pcsoft.fr...
Antoine GIDROL a écrit : Bonjour, en acces natif sur une base mysql, j'arrive pas à faire cette requete, pourtant je ne pense pas me tromper...
select personne.id_per from personne where personne.id_per not in ( select carte.id_per from carte where carte.id_per = personne.id_per)
J'essai de retrouver les 'personnes' , qui ne possedent pas de 'carte'
et j'ai comme réponse du serveur :
#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 carte . id_per from carte where carte . id_per = personn
la syntaxe semble correcte... as-tu essayé cette requète en direct sous mysql ? la requète ci-dessous fonctionne bien en mysql direct (version 4.1.10.a) : select caissiers.id_caissier, libelle from caissiers where caissiers.id_caissier not in (select caissiers_encours.id_caissier from caissiers_encours) -- Jacques Trepp Albygest - 81160 - St Juery jacques-pas de spam.trepp@free.fr (enlever '-pas de spam' pour me joindre) http://www.albygest.com |
| |
| |
| | | |
|
| | |
| |
Posté le 04 novembre 2005 - 09:56 |
Oui, comme je te disais, les Select dans un Select ne sont supporté qu'à partir de MySql 4.1 et tu n'es qu'à la 4.0.22....
Peut-être que tu devrais tenter l'upgrade de ton MySql (l'ennuie c'est que ton hébergeur ne le fera peut-être pas)...
As-tu l'occasion de tester ta requête sur Une version MySql >= 4.1 ?
-----------------------------------------------------------------------
Je profites de ton message (comme tu semble t'y connaitre un peu) car j'ai un soucis avec une requête et je ne trouve pas la solution :
un fichier stock contenant : id_stock - ref - description
1 - 4444 - roulement 2 - 5555 - Ecrou 3 - 6666 - Cable
Un fichier historique des ventes : (id_histo - id_stock - movedate - price)
1 - 1 - 20050101 - 20,65 2 - 2 - 20050203 - 1,35 3 - 1 - 20050215 - 20,75 4 - 3 - 20050116 - 10,50 5 - 2 - 20050501 - 1,40 6 - 2 - 20050604 - 1,45 7 - 3 - 20050116 - 10,65 8 - 1 - 20050420 - 20,90
Et j'ai besoin de retrouver une ligne par article correspondant à la dernière vnte de celui-ci
Soit :
1 - 20050420 - 20,90 2 - 20050604 - 1,45 3 - 20050116 - 10,65
Lorsque je fais ma requête, j'utilise la selection sur le MAX de mon movedate et un GROUP BY sur le id_stock
Le problème c'est que le id_histo et price ne sont pas retournés à cause du GROUP BY.
Une solution ?
Merci d'avance
Fred |
| |
| |
| | | |
|
| | |
| |
Posté le 04 novembre 2005 - 10:51 |
Une idée comme ça au passage... Est ce qu'une sous requête comme ton select servant pour le not in n'est pas effectuée avant la requête extérieure? Parce que dans ce cas, il manque simplement la jointure avec ta table personne : not in (select carte.id_per from carte, PERSONNE where carte.id_per = personne.id_per) sinon, dans la requête, personne.id_per est considéré comme une variable non? Enfin, je suis loin d'être une pro en sql donc c'était juste un idée comme ça hein...
Céline.
Antoine GIDROL a écrit:
Bonjour, en acces natif sur une base mysql, j'arrive pas à faire cette requete, pourtant je ne pense pas me tromper...
select personne.id_per from personne where personne.id_per not in ( select carte.id_per from carte where carte.id_per = personne.id_per)
J'essai de retrouver les 'personnes' , qui ne possedent pas de 'carte'
et j'ai comme réponse du serveur :
#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 carte . id_per from carte where carte . id_per = personn
une idée
par avance grand merci.
Antoine
|
| |
| |
| | | |
|
| | |
| |
Posté le 04 novembre 2005 - 11:43 |
Antoine GIDROL a écrit :
Bonjour,
oui, j'ai bien entendu essayer directement sur le serveur mysql, mais elle ne fonctionne pas. la version est 4.0.22 d'apres ce que je sais sur le serveur de l'hébergeur.
je viens de tester ceci aussi histoire de voir.....
mais marche pas non plus.
SELECT personne.id_per FROM personne WHERE personne.id_per NOT IN ( SELECT carte.id_per FROM carte)
Antoine
hum... je ne suis pas certain que la version 4.0 accepte les requètes imbriquées.
-- Jacques Trepp Albygest - 81160 - St Juery jacques-pas de spam.trepp@free.fr (enlever '-pas de spam' pour me joindre) http://www.albygest.com |
| |
| |
| | | |
|
| | |
| |
Posté le 04 novembre 2005 - 11:45 |
Je pense que c'est un probleme de version mysql oui. Et il est vrai que le fait d'etre heberger me bloque , mais bon, j'ai utilisé une solution que je considère pas géniale, mais qui fonctionne.
select personne.id_per from personne left join carte on personne.id_per=carte.id_per where carte.id_per is null
Merci à tous pour vos réponses.
concernant la question de fred, je ferai un truc dans ce genre :
select stock.id_stock , stock.ref , stock.description, ventes.id_histo , ventes.id_stock ,ventes.movedate ,ventes.price from stock, ventes where stock.id_stock = ventes.id_stock and ventes.movedate = (select max(v2.movedate) from ventes v2 where v2.id_stock = ventes.id_stock)
J'espere avoir bien répondu à ta question.
cordialement
Antoine
"Fred" <fred-76@hotmail.com> a écrit dans le message de news: 436b1c28$1@news.pcsoft.fr...
Oui, comme je te disais, les Select dans un Select ne sont supporté qu'à partir de MySql 4.1 et tu n'es qu'à la 4.0.22....
Peut-être que tu devrais tenter l'upgrade de ton MySql (l'ennuie c'est que ton hébergeur ne le fera peut-être pas)...
As-tu l'occasion de tester ta requête sur Une version MySql >= 4.1 ?
-----------------------------------------------------------------------
Je profites de ton message (comme tu semble t'y connaitre un peu) car j'ai un soucis avec une requête et je ne trouve pas la solution :
un fichier stock contenant : id_stock - ref - description
1 - 4444 - roulement 2 - 5555 - Ecrou 3 - 6666 - Cable
Un fichier historique des ventes : (id_histo - id_stock - movedate - price)
1 - 1 - 20050101 - 20,65 2 - 2 - 20050203 - 1,35 3 - 1 - 20050215 - 20,75 4 - 3 - 20050116 - 10,50 5 - 2 - 20050501 - 1,40 6 - 2 - 20050604 - 1,45 7 - 3 - 20050116 - 10,65 8 - 1 - 20050420 - 20,90
Et j'ai besoin de retrouver une ligne par article correspondant à la dernière vnte de celui-ci
Soit :
1 - 20050420 - 20,90 2 - 20050604 - 1,45 3 - 20050116 - 10,65
Lorsque je fais ma requête, j'utilise la selection sur le MAX de mon movedate et un GROUP BY sur le id_stock
Le problème c'est que le id_histo et price ne sont pas retournés à cause du GROUP BY.
Une solution ?
Merci d'avance
Fred
|
| |
| |
| | | |
|
| | |
| |
Posté le 04 novembre 2005 - 11:48 |
Fred a écrit :
Oui, comme je te disais, les Select dans un Select ne sont supporté qu'à partir de MySql 4.1 et tu n'es qu'à la 4.0.22....
Peut-être que tu devrais tenter l'upgrade de ton MySql (l'ennuie c'est que ton hébergeur ne le fera peut-être pas)...
As-tu l'occasion de tester ta requête sur Une version MySql >= 4.1 ?
-----------------------------------------------------------------------
Je profites de ton message (comme tu semble t'y connaitre un peu) car j'ai un soucis avec une requête et je ne trouve pas la solution :
un fichier stock contenant : id_stock - ref - description
1 - 4444 - roulement 2 - 5555 - Ecrou 3 - 6666 - Cable
Un fichier historique des ventes : (id_histo - id_stock - movedate - price)
1 - 1 - 20050101 - 20,65 2 - 2 - 20050203 - 1,35 3 - 1 - 20050215 - 20,75 4 - 3 - 20050116 - 10,50 5 - 2 - 20050501 - 1,40 6 - 2 - 20050604 - 1,45 7 - 3 - 20050116 - 10,65 8 - 1 - 20050420 - 20,90
Et j'ai besoin de retrouver une ligne par article correspondant à la dernière vnte de celui-ci
Soit :
1 - 20050420 - 20,90 2 - 20050604 - 1,45 3 - 20050116 - 10,65
Lorsque je fais ma requête, j'utilise la selection sur le MAX de mon movedate et un GROUP BY sur le id_stock
Le problème c'est que le id_histo et price ne sont pas retournés à cause du GROUP BY.
Une solution ?
Merci d'avance
Fred
essaies d'intégrer tes colonnes dans le group by group by movedate, id_histo, price
-- Jacques Trepp Albygest - 81160 - St Juery jacques-pas de spam.trepp@free.fr (enlever '-pas de spam' pour me joindre) http://www.albygest.com |
| |
| |
| | | |
|
| | |
| |
Posté le 04 novembre 2005 - 11:50 |
Bonjour, Une ideé. SI au lieu de faire une sous requete, tu faisais une requête, avec tes deux fichiers, en utilisant un left join et en testant l'absence des enregistements coté Carte? Ciao |
| |
| |
| | | |
|
| | |
| |
Posté le 04 novembre 2005 - 14:08 |
Merci à toi Antoine pour la démarche....malheureusement cette requête ne me renvoit pas ce dont j'ai besoin....
Ceci dit, je pense que c'est la voix à suivre, mais une subtilité doit m'échapper. J'ai essayé plusiurs manière avec ce deuxième SELECT mais rien n'y fait !
Si quelqu'un à d'autres idées ?
Merci
Fred |
| |
| |
| | | |
|
| | |
| |
Posté le 10 novembre 2005 - 14:54 |
Si je peux me permettre :
SELECT Stock.id_Stock, Histo.movedate, Histo.Price FROM Stock LEFT OUTER Historique Histo ON Histo.id_stock = Stock.id_stock WHERE Histo.movedate = ( SELECT Max(Histo2.movedate) FROM Historique Histo2 WHERE Histo2.id_stock = Stock.id_stock) |
| |
| |
| | | |
|
| | | | |
| | |
| | |
| |
|
|
|