Brakuje Ci faktu, że widoki w MySQL nie zezwalają na podzapytania w from
klauzula. Są dozwolone w select
i where
i having
jednak klauzule.
dokumentacja jest całkiem jasne:
W twoim przypadku prawdopodobnie możesz przepisać from
klauzula jako skorelowane podzapytanie w select
klauzula. Możesz także użyć wielu warstw widoków, aby robić to, co chcesz.
EDYCJA:
Instrukcja SELECT w SQL zawiera następujące klauzule:SELECT
, FROM
, WHERE
, GROUP BY
, HAVING
i ORDER BY
(zgodnie z normą). Ponadto MySQL dodaje takie rzeczy jak LIMIT
, i INTO OUTFILE
. Możesz to zobaczyć w sposób, w jaki MySQL opisuje SELECT
klauzula w dokumentacji
. Możesz to również zobaczyć w dokumentacji prawie każdej bazy danych.
Operacje takie jak join
są częścią FROM
klauzula (podobnie WITH ROLLUP
jest częścią GROUP BY
i DESC
jest częścią ORDER BY
). Może się to wydawać tajemniczymi konwencjami składniowymi, ale staje się ważne, gdy istnieje ograniczenie takie jak powyższe.
Być może jednym z powodów zamieszania jest styl wcięcia, który wygląda następująco:
select . . .
from t1
inner join t2
on . . .
Gdzie instrukcje łączenia ustawiają się pod select
. To jest mylące. Zapisałbym to jako:
select
from t1 join
t2
on . . .
Tylko select
klauzule ustawiają się pod select.