I don’t think there is a performance difference between map and tuple. But tuple, especially long tuple, is hard to remember the position of each element. So I rarely use tuples for database results.
For better maintainability, why not create relationship and use preload like this:
query = from(Child, where: [is_active: true], preload: [:parent])
children = Repo.all(query)
Enum.each(children, fn child ->
child.name
child.parent.logo
end)
If you have to use inner join (i.e. some child has no parent), then:
from(
c in Child,
join: p in assoc(c, :parent),
where: [is_active: true]
preload: [parent: p]
)
You can also use select to reduce the fields needed. The key point is that using struct/map is much clear than tuple.


















