代码之家  ›  专栏  ›  技术社区  ›  Sudeep Ghimiray

如何在Rails中编写复杂的活动记录查询

  •  0
  • Sudeep Ghimiray  · 技术社区  · 7 年前

    我需要一个活动记录查询来获取数组。模型的积垢工作正常,但我需要在视图文件中获取数组。我有以下SQL语法。

    select FirstName from Person.Person
    LEFT JOIN Sales.SalesPerson
    ON Person.BusinessEntityID = SalesPerson.BusinessEntityID
    LEFT JOIN Sales.SalesTerritory
    ON SalesPerson.TerritoryID = SalesTerritory.TerritoryID
    where SalesPerson.BusinessEntityID is null and SalesPerson.TerritoryID is null
    

    rails中的活动记录查询语法是什么?有什么想法吗?

    2 回复  |  直到 7 年前
        1
  •  2
  •   kzq    7 年前

    接受的答案将生成一个错误的查询,如下所示

    select * from persons 
    left outer join sales_persons on sales_persons.person_id = persons.id 
    left outer join sales_territories on sales_territories.person_id = persons.id
    

    SalesTerritory表与Person联接,但根据您的SQL,它应该与SalesPerson联接

    因为它是一个嵌套连接,所以下面将生成正确的SQL

    Person.select(:first_name).left_joins(sales_person: :sales_territory).
    where(sales_persons: {business_entity_id: nil, territory_id: nil}).
    pluck(:first_name)
    
        2
  •  0
  •   Ursus    7 年前

    除了case和tables名称之外,您的查询应该如下所示

    Person.left_joins(:sales_person, :sales_territory).
        where(sales_persons: {business_entity_id: nil, territory_id: nil}).
        pluck(:first_name)