Report abuse

lets say Thing has_many :parts,   
and a Part includes a code and a color

---
Scenario (not sql):
  Thing.find all where 
    (parts.code = 1 AND parts.color = 'red') AND 
    (parts.code = 2 AND parts.color = 'green')

sql:

SELECT things.id AS t0_r0, parts.id AS t1_r0, parts.thing_id AS t1_r1, parts.code AS t1_r2, parts.color AS t1_r3 
FROM things 
LEFT OUTER JOIN parts ON parts.thing_id = things.id 
WHERE ((parts.code = 2 AND parts.color = 'green')
  AND things.id IN 
  (SELECT things.id 
  FROM things
  LEFT OUTER JOIN parts ON parts.thing_id = things.id 
  WHERE (parts.code = 1 AND parts.color = 'red')))

---
Scenario (not sql):
  Thing.find all where 
    (parts.code = 1 AND parts.color = 'red') AND 
    (parts.code = 2 AND parts.color = 'green')
  order by the color of parts with code = 3

sql:

SELECT things.id AS t0_r0, parts.id AS t1_r0, parts.thing_id AS t1_r1, parts.code AS t1_r2, parts.color AS t1_r3 
FROM things 
LEFT OUTER JOIN parts ON parts.thing_id = things.id 
WHERE ((parts.code = 2 AND parts.color = 'green')
  AND things.id IN 
  (SELECT things.id 
  FROM things
  LEFT OUTER JOIN parts ON parts.thing_id = things.id 
  WHERE (parts.code = 1 AND parts.color = 'red'))
  AND things.id IN 
    (SELECT things.id
    FROM things
    LEFT OUTER JOIN parts 
    ON parts.thing_id = things.id 
    WHERE (parts.code = 3)
    ORDER BY parts.color))