Ecto Model - select中的子查询

Den*_*sov 3 ecto phoenix-framework

我需要使用Ecto进行此SQL查询:

SELECT users.*, (select count(0) from money_transactions where from_id = users.id AND created_at > '2016-1-25 0:00:00.000000') as money_transactions_today_db FROM "users" WHERE "users"."client_token" = '123'
Run Code Online (Sandbox Code Playgroud)

我尝试做这样的事情,但它不起作用:

query = from users in Like4uElixir.User,
        where: users.client_token in ^tokens,
        select: {users, (from money_transactions in Like4uElixir.MoneyTransaction,
                            where: money_transactions.from_id == users.id,
                            select: count(0))}
Run Code Online (Sandbox Code Playgroud)

Ecto是否支持子查询?如果没有,我该如何执行查询?

Jos*_*lim 10

您可以使用查询片段:

query = from users in Like4uElixir.User,
        where: users.client_token in ^tokens,
        select: {users, (fragment("(SELECT COUNT(0) FROM money_transactions
                                    WHERE money_transactions.from_id == ?)", users.id))}
Run Code Online (Sandbox Code Playgroud)

虽然在这种情况下,查询也可以使用常规联接和group_by编写.目前对Ecto中子查询的支持是有限的.