Search code examples
elixirecto

Ecto fragment subquery alias


I have an Ecto Subquery such as

my_sub = from(m in module
  select: %{id, date}
)

another_subquery = from(m2 in module2
  join: fragment(subquery(my_sub) "as s")
  ...
)

I am trying to alias the my_sub as s in the join.

How can I do that?


Solution

  • You can achieve "aliases" using Ecto's positional binding.

    my_subquery =
      from m in Module,
      select: %{id: m.id, date: m.date}
    
    another_subquery = 
      from m2 in Module2,
      join: s in subquery(my_subquery), on: m2.id == s.id,
      where: s.date >= ^my_date