How to write simple, but optimized left join for MySQL in Slick

553 Views Asked by At

How would I write the equivalent of this LEFT OUTER JOIN query using Slick?

SELECT i.itemid, p.propvalue
FROM items i
LEFT JOIN properties p ON i.itemid = p.itemid AND p.propname = "Property Name"
WHERE i.available

I read the docs and it seemed like something like this was the way to go.

for {
  (i, p) <- Items leftJoin Properties on ((i, p) => (i.itemid === p.itemid && p.propname === "Property Name")) if i.available === 1.toByte
} yield (i.itemid, p.propvalue)

However, Slick writes a really complex query with subqueries which results in bad performance and actually causes MySQL to hang on what seems like any machine but my dev machine. I'm using Slick 2.02 on Scala 2.10.4.

I even get subqueries from something even simpler like this

for {
  (i, p) <- Items leftJoin Properties on (_.itemid === _.itemid)
} yield (i.itemid, p.propvalue)

What am I doing wrong? How do I get Slick to write a LEFT JOIN like the one I've written in MySQL above?

0

There are 0 best solutions below