Bạn đang thiếu thực tế là các khung nhìn trong MySQL không cho phép truy vấn con trong from
mệnh đề. Chúng được phép trong select
và where
và having
các mệnh đề, tuy nhiên.
tài liệu khá rõ ràng:
Trong trường hợp của bạn, bạn có thể viết lại from
mệnh đề như một truy vấn con tương quan trong select
mệnh đề. Bạn cũng có thể sử dụng nhiều lớp chế độ xem để làm những gì bạn muốn.
CHỈNH SỬA:
Câu lệnh SELECT trong SQL có các mệnh đề sau:SELECT
, FROM
, WHERE
, GROUP BY
, HAVING
và ORDER BY
(theo tiêu chuẩn). Ngoài ra, MySQL còn thêm những thứ như LIMIT
và INTO OUTFILE
. Bạn có thể thấy điều này theo cách mà MySQL mô tả SELECT
trong tài liệu
. Bạn cũng có thể thấy điều này trong tài liệu cho hầu hết mọi cơ sở dữ liệu.
Các thao tác như join
là một phần của FROM
mệnh đề (tương tự WITH ROLLUP
là một phần của GROUP BY
và DESC
là một phần của ORDER BY
). Đây có vẻ giống như các quy ước cú pháp phức tạp, nhưng nó trở nên quan trọng khi có một hạn chế như ở trên.
Có lẽ một lý do cho sự nhầm lẫn là kiểu thụt lề giống như sau:
select . . .
from t1
inner join t2
on . . .
Nơi các câu lệnh kết hợp xếp hàng dưới select
. Điều này gây hiểu lầm. Tôi sẽ viết cái này là:
select
from t1 join
t2
on . . .
Chỉ select
các mệnh đề xếp hàng bên dưới select.