recomendo muito o drizzle porque ele é basicamente sql dentro de funções typescript. e se isso nao é suficiente, voce pode usar generics dentro das queries puras. sinceramente o melhor pra esse caso de queries pesadas. só é chatinho de criar tabela nele ou criar migrações mas isso é o de menos