Il vous manque le fait que les vues dans MySQL n'autorisent pas les sous-requêtes dans le from
clause. Ils sont autorisés dans le select
et where
et having
clauses, cependant.
La documentation est assez clair :
Dans votre cas, vous pouvez probablement réécrire le from
clause en tant que sous-requête corrélée dans le select
clause. Vous pouvez également utiliser plusieurs couches de vues pour faire ce que vous voulez.
MODIFIER :
Une instruction SELECT en SQL contient les clauses suivantes :SELECT
, FROM
, WHERE
, GROUP BY
, HAVING
, et ORDER BY
(selon la norme). De plus, MySQL ajoute des choses comme LIMIT
, et INTO OUTFILE
. Vous pouvez le voir dans la façon dont MySQL décrit le SELECT
clause dans la documentation
. Vous pouvez également le voir dans la documentation de presque toutes les bases de données.
Opérations telles que join
font partie du FROM
clause (de même WITH ROLLUP
fait partie du GROUP BY
et DESC
fait partie de ORDER BY
). Celles-ci peuvent sembler être des conventions syntaxiques obscures, mais cela devient important lorsqu'il y a une restriction comme celle ci-dessus.
L'une des raisons de la confusion est peut-être un style d'indentation qui ressemble à :
select . . .
from t1
inner join t2
on . . .
Où les instructions de jointure s'alignent sous le select
. C'est trompeur. J'écrirais ceci comme suit :
select
from t1 join
t2
on . . .
Seul le select
les clauses s'alignent sous select.