Last time I needed one of these, I just used Rose::DB::Object::QueryBuilder because I couldn't see how to make SQL::Abstract do joins. If you look at the source for QueryBuilder, you'll find pretty solid support for joins with specific types and criteria (explained in a block comment), but unfortunately this isn't in the POD yet.