Tôi tin rằng bạn có thể coi đây là vấn đề về ưu tiên của toán tử.
Khi bạn viết điều này:
FROM groups grp,
insrel archiverel
LEFT OUTER JOIN ownrel ownrel ON grp.number = ownrel.dnumber
LEFT OUTER JOIN tags tags ON tags.number = ownrel.snumber
Tôi nghĩ nó được trình phân tích cú pháp diễn giải như thế này:
FROM groups grp,
(
(
insrel archiverel
LEFT OUTER JOIN ownrel ownrel ON grp.number = ownrel.dnumber
)
LEFT OUTER JOIN tags tags ON tags.number = ownrel.snumber
)
Nếu vậy, thì ở trong cùng, phép nối "grp" không bị ràng buộc.
Khi bạn đảo ngược các dòng với "groups" và "insrel", phép nối trong cùng sẽ áp dụng cho "groups" và "ownrel", vì vậy nó hoạt động.
Có lẽ điều này cũng sẽ hoạt động:
FROM groups grp
JOIN insrel archiverel ON archiverel.dnumber = grp.number
LEFT OUTER JOIN ownrel ownrel ON grp.number = ownrel.dnumber
LEFT OUTER JOIN tags tags ON tags.number = ownrel.snumber
WHERE archiverel.snumber = 11128188