【问题标题】:Ecto joins returning nil recordsEcto 加入返回零记录
【发布时间】:2018-01-21 17:27:33
【问题描述】:

我有两个 ecto 查询,比如 query1 和 query2,现在我正在这两个 ecto 查询之间执行完全连接,就像这样

query1 |> join(:full, [a], b in subquery(query2), a.id == b.id)

一切正常,但有些记录返回为零,类似这样

[%user{}, %user{}, %user{}, nil, %user{}, %user{}, nil, %user{}, %user{}, nil]

我认为这个ecto thread.也讨论了同样的问题

是否有一些解决此 ecto join 问题的方法。

【问题讨论】:

    标签: postgresql elixir ecto


    【解决方案1】:

    那个 Ecto 线程是一个单独的问题。 :)

    您使用的是完全联接,这意味着即使没有匹配项,也会返回联接的左侧和右侧。如果您使用 :inner 连接,它应该可以按预期工作:

    query1 |> join(:inner, [a], b in subquery(query2), a.id == b.id)
    

    如果您需要保持完全联接,也许您希望在示例中同时返回 ab

    query1
    |> join(:inner, [a], b in subquery(query2), a.id == b.id)
    |> select([a, b], {a, b})
    

    这样可以保证其中一个不为零。

    【讨论】:

    • :left加入或... |> Enum.reject(& is_nil(&1))与他的查询,因为他可能需要与子查询无关的那些
    • @José inner join 只会返回匹配的记录,我想要匹配的记录以及不匹配的记录。所以内连接不能满足我的要求。
    • 如果您必须使用 full_join,那么您将收到 nil。也许您想同时返回ab?我已经更新了我的答案。
    猜你喜欢
    • 2018-09-15
    • 1970-01-01
    • 2012-05-20
    • 1970-01-01
    • 2015-10-22
    • 1970-01-01
    • 2021-11-24
    • 2013-07-24
    • 1970-01-01
    相关资源
    最近更新 更多