Tôi có lược đồ cơ sở dữ liệu với giáo viên, trường học và các huyện. Bảng TEACHERS
có cột số SCHOOL_ID
có thể vô hiệu hóa (một giáo viên có thể hoặc không thuộc về một trường) và bảng SCHOOLS
có cột vô giá trị DISTRICT_ID
(một trường có thể hoặc không thể thuộc về một học khu).Không thể viết hai bên trái tham gia bằng Esqueleto
Sử dụng Esqueleto, tôi muốn danh sách giáo viên, mỗi giáo viên có một trường (nếu họ thuộc về một) và một học khu (nếu họ thuộc về một trường thuộc về một học khu). Phải mất một chút thời gian để tìm ra các biểu hiện đúng chỉ cho teacher-> trường trái tham gia, nhưng tôi cuối cùng đã nhận nó đúng:
select $
from $ \(teacher `LeftOuterJoin` school) -> do
on (teacher ^. TeacherSchoolId ==. school ?. SchoolId)
return (teacher, school)
Tôi đã thử thêm trái khác tham gia vào DISTRICTS
sử dụng một biểu thức tương tự:
select $
from $ \(teacher `LeftOuterJoin` school `LeftOuterJoin` district) -> do
on (school ^. SchoolDistrictId ==. district ?. DistrictId)
on (teacher ^. TeacherSchoolId ==. school ?. SchoolId)
return (teacher, school, district)
Nhưng tôi nhận được một lỗi:
Couldn't match type ‘Entity School’ with ‘Maybe (Entity School)’
Expected type: SqlExpr (Maybe (Entity School))
Actual type: SqlExpr (Entity School)
In the first argument of ‘(?.)’, namely ‘school’
In the second argument of ‘(==.)’, namely ‘school ?. SchoolId’
thể đôi này tham gia được thể hiện bằng Esqueleto? Nếu vậy, làm thế nào?
Tôi không biết thư viện này, và tất cả có vẻ phức tạp, nhưng có vẻ như bạn cần phải nâng một số nội dung 'Có thể' để đồng bộ hóa với nội dung SQL. Hoặc đường vòng khác. Tôi không biết. – dfeuer