Lý do bạn gặp lỗi là do răng cưa AS X
. Nhưng vấn đề thực sự là bạn đã sử dụng *
, thay vì liệt kê các trường bạn muốn.
Trong truy vấn đầu tiên, SELECT *
thực sự tạo ra các trường như:
A.id, A.name, A.description, B.id, B.name, B.date_started, C.id, C.name, C.isDeleted
Điều này hoạt động tốt, trừ khi bạn cố gắng tham chiếu trực tiếp đến một trường bằng tên của nó và không sử dụng bí danh của nó. Dù bằng cách nào thì công cụ SQL của bạn sẽ không gặp sự cố với điều này, dù bạn đang làm gì với tập kết quả vẫn có thể gặp sự cố.
Tuy nhiên, khi bạn di chuyển truy vấn của mình thành truy vấn con và đặt bí danh thì kết quả AS X
, sau đó bạn kết thúc với:
X.id, X.name, X.description, X.id, X.name, X.date_started, X.id, X.name, X.isDeleted
Bây giờ bạn có thể thấy lý do tại sao nó phàn nàn. Bạn có thể hiểu tại sao việc sử dụng *
cũng không tốt , bởi vì sự kết hợp này có thể hoạt động trong một khoảng thời gian, và sau đó bạn thêm trường mới vào bảng hiện có, trường đó giống với một bảng khác và nói rằng, mọi truy vấn bạn đã viết với cả hai bảng này, bây giờ cần phải được viết lại.