что делать супер-join и супер-извращения с sql надо крайне редко, когда это действительно необходимо.
стараться делать всё простыми запросами.
если задача такая сложная, то так или иначе для работы программы должны быть созданы n-ное количество классов, в которые должен быть вложен нужный функционал. если классы будут созданы правильно, то такой вопрос отпадёт сам по себе. В этом случае как раз и будет красота решения.