requete imbriquée - SQL/NoSQL - Programmation
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?
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.
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.
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
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é
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+
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 :
|
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...
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
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
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
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!!