trying to make a Slick query more readable का एक परिणाम के रूप में, मैं इस प्रश्न के निर्माता है, जो काम करता हैइन दो स्लिम प्रश्नों के बराबर क्यों नहीं हैं?
val q = Users.filter(_.id === userId) join People on {
case (u, p) => u.personId === p.id
} joinLeft Addresses on {
case ((u, p), a) => p.addressId === a.id
} joinLeft Businesses on {
case (((u, p), a), b) => p.businessId === b.id
} joinLeft Addresses on {
case ((((u, p), a), b), ba) => b.flatMap(_.addressId) === ba.id
} map {
case ((((u, p), a), b), ba) => (p, a, b, ba)
}
और यह एक मैंने सोचा था कि बराबर होगा है, लेकिन काम नहीं करता:
val q = Users.filter(_.id === userId) join People joinLeft Addresses joinLeft Businesses joinLeft Addresses on {
case ((((u, p), a), b), ba) =>
u.personId === p.id &&
p.addressId === a.flatMap(_.id) &&
p.businessId === b.flatMap(_.id) &&
b.flatMap(_.addressId) === ba.id
} map {
case ((((u, p), a), b), ba) => (p, a, b, ba)
}
दूसरा एक प्रतीत होता है प्रोफाइल की एक सूची लौट रहे हैं जिसमें लक्ष्य एक से अधिक शामिल है।
वे समान क्यों नहीं हैं?
"बराबर" एसक्यूएल (आईई इस निर्माण के लक्ष्य) है:
select p.*, a1.*, b.*, a2.* from Users u
innerJoin People p on (u.personId == p.id)
leftJoin Addresses a1 on (p.addressId == a1.id)
leftJoin Businesses b on (p.businessId == b.id)
leftJoin Addresses a2 on (b.addressId == a2.id)