教師、学校、学区のデータベース スキーマがあります。TEACHERS
テーブルには null 可能な列があり(SCHOOL_ID
教師は学校に属している場合と属していない場合があります)、SCHOOLS
テーブルには null 可能なDISTRICT_ID
列があります (学校は学区に属している場合と属していない場合があります)。
Esqueleto を使用して、それぞれが学校 (ある学校に属している場合) と学区 (学区に属する学校に属している場合) を含む教師のリストが必要です。teacher->school left join の正しい表現を理解するのに少し時間がかかりましたが、最終的には正しい表現になりました。
select $
from $ \(teacher `LeftOuterJoin` school) -> do
on (teacher ^. TeacherSchoolId ==. school ?. SchoolId)
return (teacher, school)
DISTRICTS
同様の式を使用して、別の左結合を追加しようとしました。
select $
from $ \(teacher `LeftOuterJoin` school `LeftOuterJoin` district) -> do
on (school ^. SchoolDistrictId ==. district ?. DistrictId)
on (teacher ^. TeacherSchoolId ==. school ?. SchoolId)
return (teacher, school, district)
しかし、私はエラーが発生します:
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’
この二重結合は Esqueleto で表現できますか? もしそうなら、どのように?