Sql - utilisation de innerjoin + sous requete

Wamy -  
 Wamy -
Bonjour,
je travaille actuellement sur une page php, connectée a une base Access, avec requete sql, & co.
j'ai un "requeteur" comme outil, qui me permet de tester mes requetes avant de les insérer dans mon code php.
et je bloque pour imbriquer plusieurs requetes.

j'ai écrit cette requete qui fonctionne :

############
SELECT *
FROM normes n
inner join (normes_mots_cles nmc1 inner join (normes_mots_cles nmc2 inner join normes_mots_cles nmc3
on nmc2.pk_type_norme = nmc3.pk_type_norme
and nmc2.pk_cd_norme = nmc3.pk_cd_norme
and nmc2.pk_ed_norme = nmc3.pk_ed_norme)
on nmc1.pk_type_norme = nmc2.pk_type_norme
and nmc1.pk_cd_norme = nmc2.pk_cd_norme
and nmc1.pk_ed_norme = nmc2.pk_ed_norme)
on n.pk_type_norme = nmc1.pk_type_norme
and n.pk_cd_norme = nmc1.pk_cd_norme
and n.pk_ed_norme = nmc1.pk_ed_norme
WHERE 1=1
AND nmc3.pk_mot_cle LIKE '%DUR%'
AND nmc2.pk_mot_cle LIKE '%RES%'
AND nmc1.pk_mot_cle LIKE '%AC%'
###########
en résumé, je fais une jointure entre la table 'normes' et la table 'mots_clés'...je fais 3 inner join sur 'mots_clés' car l'utilisateur peux entrer 3 mots cles.
cette requete me renvoi bien un résultat. Maintenant, j'aimerai réutiliser ce resultat et en faire une jointure au sein d'une autre requete.. (un peu complexe, j'avoue)

j'ai testé ceci :

######
SELECT *
FROM normes_destinataires inner join
(SELECT *
FROM normes n
inner join (normes_mots_cles nmc1 inner join (normes_mots_cles nmc2 inner join normes_mots_cles nmc3
on nmc2.pk_type_norme = nmc3.pk_type_norme
and nmc2.pk_cd_norme = nmc3.pk_cd_norme
and nmc2.pk_ed_norme = nmc3.pk_ed_norme)
on nmc1.pk_type_norme = nmc2.pk_type_norme
and nmc1.pk_cd_norme = nmc2.pk_cd_norme
and nmc1.pk_ed_norme = nmc2.pk_ed_norme)
on n.pk_type_norme = nmc1.pk_type_norme
and n.pk_cd_norme = nmc1.pk_cd_norme
and n.pk_ed_norme = nmc1.pk_ed_norme
WHERE 1=1
AND nmc3.pk_mot_cle LIKE '%DUR%'
AND nmc2.pk_mot_cle LIKE '%RES%'
AND nmc1.pk_mot_cle LIKE '%AC%') query1

on normes_destinataires.pk_type_norme=query1.pk_type_norme
and normes_destinataires.pk_cd_norme=query1.pk_cd_norme
and normes_destinataires.pk_ed_norme=query1.pk_ed_norme)

#### erreur renvoyée : "Syntax error in FROM clause"

merci d'avoir pris le temps de lire mon bla bla...
si quelqu'un a une idée ??? ...

W@my

2 réponses

mrodot Messages postés 4 Statut Membre 2
 
Bonjour,

Le second "SELECT *" n'est pas correct et il faudrait écrire :

SELECT *
FROM normes_destinataires inner join
normes n
inner join (normes_mots_cles

En fait, la syntaxe la plus simple est plutôt :

select * from table1 t1
inner join table2 t2 on t2.xxx = t1.zzz and t2.ggg=t1.uuu
inner join table3 t3 on t3.kkk = t1.mmm
where ...

Il n'est donc pas utile d'imbriquer les jointures comme tu l'as fait dans la première expression, même si cela marche cela rend la lecture et le débogage un peu plus difficile.

D'autre part le test 1=1 complique l'expression inutilement.

Pour finir, es-tu sûr que les 3 mots clefs sont renseignés à chaque fois. Si l'un d'eux est nul, aucun résultat ne sera retourné pour l'enregistrement correspondant.

Bon courage,
Martinus.
1
Wamy
 
ok, merci pr tes précieux conseils.
je "bidouille" en sql depuis peux, donc toute les infos sont bonne a prendre.
Je regarde ca et te tient au courant....

Encore merci.
0