requete imbriquée

requete imbriquée - SQL/NoSQL - Programmation

Marsh Posté le 10-06-2007 à 15:30:11    

bonjour
 
peut t on faire des requete imbriquée sous easy php 6 ou 7?
j'ai fais une requete sous EMS elle fonctionne bien (sûr)
pourquoi sous easy php ne fonctionne t elle pas, il me dit erreur de syntaxe
 
ex select  count(1) from (select a table group by a)) t
 
ou  
 
insert into FICHE_TEMP
(`fic_num`,`fic_id`, `fic_dom1`, `fic_sdom1`)
select fiche.fic_num,fiche.fic_id, df.id_domaine, df.id_ss_domaine
from `fiche_fic` fiche JOIN `dom_fiche_df` df
on fiche.fic_num = df.id_fiche
group by df.id_fiche
union
select fiche.fic_num,fiche.fic_id,NULL,NULL
from `fiche_fic` fiche
where  fiche.fic_num not in (SELECT df.id_fiche from `dom_fiche_df` df);
 
est ce que j'ai mal installé easy php, peu probable , est ce pas possible de faire de telle requete sous easy php, ça m'etonnerait?
pouvez vou m'aider Merci c'est embetant!!
 

Reply

Marsh Posté le 10-06-2007 à 15:30:11   

Reply

Marsh Posté le 10-06-2007 à 17:45:51    

Sa dépend de la version de mysql installé avec cette version de easyphp? Les vieilles versions ne supportaient pas les sous-requêtes si je ne m'abuse. Par contre, si tu as la version 5 de mysql, elle devrait fonctionner....
 
Maintenant, les deux requêtes que tu soumet semble avoir des erreur de syntaxe (à mon avis) du moins la première à une parenthèse fermante de trop et pour la deuxième je ne suis pas certain qu'elle est correcte  entre autre je crois qu'il manque des parenthèses pour ton encadrer les deux requêtes constituant ton union?

Reply

Marsh Posté le 11-06-2007 à 10:36:06    

première requête : il manque pas un from par hasard ?
seconde requête : je vois pas trop ce qui cloque mais... INNER JOIN quand on fait un simple "join" (parceque "join" tout c'est pas c lair) et surtout, un bete "left outer join" te permet d'éviter le UNION totalement inutile.
 
ensuite, lit la doc sur "group by" et arrête de l'utiliser à toutes les sauces pour rien.

Reply

Marsh Posté le 11-06-2007 à 10:46:40    

MagicBuzz a écrit :

INNER JOIN quand on fait un simple "join" (parceque "join" tout c'est pas c lair)


 
C'est juste une question de clareté ou y'a un impact sur quelquechose ? Parceque si c'est juste pour la clareté, vu que "JOIN" est utilisée pour tout type de jointure, moi je trouve ça beaucoup plus clair de préciser le type à chaque fois, même si c'est celui par défaut.


---------------
When it's from Finland it's good.  - Mon blog
Reply

Marsh Posté le 11-06-2007 à 10:48:51    

c'est ce que je viens de dire.
 
join tout court, c'est équivalent à inner join (plus exactement, ça fait un cross join (produit cartésien), mais qui accepte la clause "on" afin de faire un inner join). en effet "cross join" est le type de jointure par défaut.
 
mettre "inner join", c'est rendre la requête lisible, et garantir qu'il y a bien une clause "on" derrière, ça évite les erreurs stupides.
 
http://forum.hardware.fr/hfr/Progr [...] m#t1495691
 
http://img166.imageshack.us/img166/4759/ensemblesah8.png

Message cité 1 fois
Message édité par MagicBuzz le 11-06-2007 à 10:50:50
Reply

Marsh Posté le 11-06-2007 à 10:53:21    

MagicBuzz a écrit :

c'est ce que je viens de dire.


 
arf ok je suis pas bien reveillé :pt1cable:


---------------
When it's from Finland it's good.  - Mon blog
Reply

Marsh Posté le 11-06-2007 à 11:02:51    

oui merci des réponse j'ai écrit trop vite la premiere requete, j'ai fait involontairement des erreurs de syntaxe
je voulais écrire : par ex  " select count(1) from
(select id_fiche from `dom_fiche_df`
group by id_fiche having count(id_fiche)>=2) t "
 
je vais verifier ma versions de mon mysql et je peux le mettre à jour ou il faut que je réinstalle tout?
 
merci pour le conseil inner join
 
pour la seconde requete en utilisant un outer join il m'indiquait une erreur ligne machin à cause des null et du group by, j'obtenais pas le meme resultat qu'avec mon union!
 
a+

Reply

Marsh Posté le 11-06-2007 à 11:06:51    

pour la seconde requête, tu mets "left outer join", tu vire tout à partir de "group by" (que tu vires aussi) et normalement t'as exactement le même résultat...
 

Code :
  1. SELECT fiche.fic_num,fiche.fic_id, df.id_domaine, df.id_ss_domaine
  2. FROM fiche_fic fiche LEFT OUTER JOIN dom_fiche_df df ON fiche.fic_num = df.id_fiche


 
sinon, pour en revenir au problème initial...
 
regarde la version de MySQL. MySQL ne supporte les requêtes imbriquées que depuis la version 4.1
Ceci dit, ça m'étonne grandement que tu puisses avoir une version plus ancienne, ça fait un bail que tout le monde est en 4.x ou 5.x...


Message édité par MagicBuzz le 11-06-2007 à 11:08:08
Reply

Marsh Posté le 11-06-2007 à 16:35:57    

pour ma version je l'ai installé en 2005 c'est sûrement la bonne ou j'ai fais une erreur de syntaxe ou j'ai un autre problème je vais réinstaller
 
merci pour l'ex de la seconde requete mais j'étais obliger d'utiliser un group by
 
a bientot

Reply

Marsh Posté le 13-06-2007 à 14:57:58    

j'ai dû avoir un bug ds easy pfp version 7, j'ai réinstaller la 8 et maintenant ça marche merci

Reply

Marsh Posté le 13-06-2007 à 14:57:58   

Reply

Marsh Posté le 23-07-2007 à 10:17:04    

Bonjour à tous,
J'utilise mysql 4.1.9 et je veux utliser "not in" qui ne marche visiblement pas. je veux avoir un sous ensemble du résultat de cette requête:
 
select at__ft.prov, at__ft.prefix, at__ft.cost, at__tlf.cost
FROM at__ft, at__tlf where (at__ft.prefix = at__tlf.prefix)  
 
c'est à dire les valeurs at_ft_prefix qui ne soient pas dans laliste suivante:
(SELECT at__ft.prefix
FROM `at__mar` , at__ft, at__tlf
WHERE (
at__ft.prefix = at__mar.prefix
)
AND (
at__ft.prefix = at__tlf.prefix
)
 
Si j'imbrique les deux ça me sort une erreur
 
select at__ft.prov, at__ft.prefix, at__ft.cost, at__tlf.cost
FROM at__ft, at__tlf where (at__ft.prefix = at__tlf.prefix)  
and not in (SELECT at__ft.prefix
FROM `at__mar` , at__ft, at__tlf
WHERE (
at__ft.prefix = at__mar.prefix
)
AND (
at__ft.prefix = at__tlf.prefix
)
 quelqu'un peut il m'aider.
 
Merci infiniment

Reply

Marsh Posté le 23-07-2007 à 10:37:57    

rajoute at_ft_prefix  avant le not in...

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed