Du mangler det faktum, at visninger i MySQL ikke tillader underforespørgsler i from
klausul. De er tilladt i select
og where
og having
klausuler dog.
dokumentationen er helt klart:
I dit tilfælde kan du sandsynligvis omskrive from
klausul som en korreleret underforespørgsel i select
klausul. Du kan også bruge flere lag af visninger til at gøre, hvad du vil.
EDIT:
En SELECT-sætning i SQL har følgende klausuler:SELECT
, FROM
, WHERE
, GROUP BY
, HAVING
, og ORDER BY
(ifølge standarden). Derudover tilføjer MySQL ting som LIMIT
, og INTO OUTFILE
. Du kan se dette på den måde, MySQL beskriver SELECT
klausul i dokumentationen
. Du kan også se dette i dokumentationen til næsten enhver database.
Handlinger såsom join
er en del af FROM
klausul (tilsvarende WITH ROLLUP
er en del af GROUP BY
og DESC
er en del af ORDER BY
). Disse kan virke som mystiske syntaktiske konventioner, men det bliver vigtigt, når der er en begrænsning som den ovenfor.
En af grundene til forvirringen er måske en indrykningsstil, der lyder sådan:
select . . .
from t1
inner join t2
on . . .
Hvor join-sætningerne står på linje under select
. Dette er misvisende. Jeg ville skrive dette som:
select
from t1 join
t2
on . . .
Kun select
klausuler er på linje under select.