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))