2016-09-26 5 views
0

erhalten die Postgresql Abfrage Es folgt und es gibt mehr als 400 Zeilenkann nicht gleiche Anzahl von Zeilen durch äquivalente Slick Abfrage

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 

ich ihr Äquivalent Slick Abfrage in Scala geschrieben haben

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 
} 

Als ich run db.run(query.result) Ich bekomme nur 12 Zeilen. Ich benutze innere Verbindung in beiden Abfragen und beide sind gleichwertig. Was kann die Ursache dafür sein?

+0

überprüfen Sie dies: http://StackOverflow.com/Questions/10799540/Select-Or-Equivalent-in-Scala-Query – JoelBonetR

+0

Ihre Slick-Abfrage ist ziemlich schwer zu lesen. Bist du sicher, dass du eine Variable nicht vermasselt hast? Haben Sie stattdessen einen monadischen Join in Erwägung gezogen? – Roman

Antwort

0

Wenn Sie slick 3.0 und höher sind. Drucken Sie die von slick generierte SQL-Anweisung und vergleichen Sie sie mit Ihrer SQL-Abfrage.

folgenden Code wird Ihnen helfen, die SQL erhalten, die von Slick

query.result.statements.foreach(println) 
2

Die SQL-Abfrage nicht die auf company.issuer_id = issuers.id beitreten enthalten.

Verwandte Themen