无法通过等效的灵活查询获得相同数量的行
Cannot get same number of rows by equivalent slick query
以下是 Postgresql 查询,它 returns 400 多行
SELECT
*
FROM
investors,
investments,
investor_personal_information,
sub_products,
products,
company,
issuers,
investment_admin_approvals,
users
WHERE
investments.investor_id = investor_personal_information.id AND
investments.investor_id = investors.id AND
investments.sub_product_id = sub_products.id AND
sub_products.product_id = products.id AND
products.company_id = company.id AND
investments.id = investment_admin_approvals.investment_id AND
issuers.owner = users.id
我已经用 Scala 编写了等效的 Slick 查询
val query = {
val baseQuery = Investments join InvestorPersonalInformation on {
case (its, ipi) => its.investorId === ipi.id
} join Investors on {
case ((its, ipi), irs) => its.investorId === irs.id
} join SubProducts on {
case (((its, ipi), irs), sbp) => its.subProductId === sbp.id
} join Products on {
case ((((its, ipi), irs), sbp), pds) => sbp.productId === pds.id
} join Tables.Company on {
case (((((its, ipi), irs), sbp), pds), cpy) => pds.companyId === cpy.id
} join Tables.Issuers on {
case ((((((its, ipi), irs), sbp), pds), cpy), iss) => cpy.issuerId === iss.id
} join InvestmentAdminApprovals on {
case (((((((its, ipi), irs), sbp), pds), cpy), iss), iaa) => its.id === iaa.investmentId
} join Users on {
case ((((((((its, ipi), irs), sbp), pds), cpy), iss), iaa), usrs) => iss.owner === usrs.id
} map {
case ((((((((its, ipi), irs), sbp), pds), cpy), iss), iaa), usrs) => (its, ipi, irs, sbp, pds, cpy, iss, iaa, usrs)
}
baseQuery
}
当我 运行 db.run(query.result)
我只得到 12 行。我在两个查询中都使用了内部联接,两者是等效的。这可能是什么根本原因?
如果你是slick 3.0及以上。打印 slick 生成的 sql 语句并与原始 sql 查询进行比较。
以下代码将帮助您获得由 slick
生成的 sql
query.result.statements.foreach(println)
SQL 查询不包含 company.issuer_id = issuers.id
上的连接。
以下是 Postgresql 查询,它 returns 400 多行
SELECT
*
FROM
investors,
investments,
investor_personal_information,
sub_products,
products,
company,
issuers,
investment_admin_approvals,
users
WHERE
investments.investor_id = investor_personal_information.id AND
investments.investor_id = investors.id AND
investments.sub_product_id = sub_products.id AND
sub_products.product_id = products.id AND
products.company_id = company.id AND
investments.id = investment_admin_approvals.investment_id AND
issuers.owner = users.id
我已经用 Scala 编写了等效的 Slick 查询
val query = {
val baseQuery = Investments join InvestorPersonalInformation on {
case (its, ipi) => its.investorId === ipi.id
} join Investors on {
case ((its, ipi), irs) => its.investorId === irs.id
} join SubProducts on {
case (((its, ipi), irs), sbp) => its.subProductId === sbp.id
} join Products on {
case ((((its, ipi), irs), sbp), pds) => sbp.productId === pds.id
} join Tables.Company on {
case (((((its, ipi), irs), sbp), pds), cpy) => pds.companyId === cpy.id
} join Tables.Issuers on {
case ((((((its, ipi), irs), sbp), pds), cpy), iss) => cpy.issuerId === iss.id
} join InvestmentAdminApprovals on {
case (((((((its, ipi), irs), sbp), pds), cpy), iss), iaa) => its.id === iaa.investmentId
} join Users on {
case ((((((((its, ipi), irs), sbp), pds), cpy), iss), iaa), usrs) => iss.owner === usrs.id
} map {
case ((((((((its, ipi), irs), sbp), pds), cpy), iss), iaa), usrs) => (its, ipi, irs, sbp, pds, cpy, iss, iaa, usrs)
}
baseQuery
}
当我 运行 db.run(query.result)
我只得到 12 行。我在两个查询中都使用了内部联接,两者是等效的。这可能是什么根本原因?
如果你是slick 3.0及以上。打印 slick 生成的 sql 语句并与原始 sql 查询进行比较。
以下代码将帮助您获得由 slick
生成的 sqlquery.result.statements.foreach(println)
SQL 查询不包含 company.issuer_id = issuers.id
上的连接。