代码之家  ›  专栏  ›  技术社区  ›  category

使用EXTO的相关子查询

  •  4
  • category  · 技术社区  · 7 年前

    如何在中编写相关子查询 Ecto ?

    例如,SQL的等价物是什么 SELECT 查询:

    --Heaviest Lemmings per Group
    SELECT ld.group_name, ld.id, ld.name, ld.weight
    FROM lemming_data ld
    WHERE weight = (
        SELECT max(weight)
        FROM lemming_data
        WHERE group = ld.group_name
    );
    

    在里面 外星生物 语法?我不知道如何引用外部查询 group_name .

    1 回复  |  直到 7 年前
        1
  •  7
  •   José Valim    7 年前

    如果不使用片段,则在Ecto中不可能进行相关子查询。所以它会是这样的:

    from ld in "lemming_data",
      where: ld.weight in fragment("(SELECT max(weight) FROM lemming_data WHERE group = ?)", ld.group_name),
      select: ld # or {ld.group_name, ld.id, ld.name, ld.weight}
    

    或:

    from ld in "lemming_data",
      where: fragment("? = (SELECT max(weight) FROM lemming_data WHERE group = ?)", ld.weight, ld.group_name),
      select: ld # or {ld.group_name, ld.id, ld.name, ld.weight}