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

如何使用雄辩语言编写子查询?

  •  0
  • Crazy  · 技术社区  · 6 年前

    我想将子查询合并到主查询

    这是我的原始查询

    select field1, field3, total
    from (select field1, field3, sum(field2) as total
          from sales
          group by field1, field2
          having total <> 0
         ) s
    group by field1;
    

    我试着合并它

    $sub = Sales::select(DB::raw('field1,field3,SUM(field2)as total'))         
                ->groupBy('field1',DB::raw('field3 having total<> 0'));  
    
     $main = DB::table(DB::raw("({$sub->toSql()}) as sub") )
                ->select('field1', 'field3','total');
                $main ->mergeBindings($sub->getQuery());
                $main ->groupBy('field1');       
                $main ->get();
    

    但它不返回任何数据。这是怎么回事?

    2 回复  |  直到 6 年前
        1
  •  0
  •   JPark    6 年前

    如果您没有使用laravel 5.6作为@digitaldrift的响应中提到的fromsub方法,只需在 from() 功能

    $sub = Sales::select(DB::raw('field1,field3,SUM(field2)as total'))         
            ->groupBy('field1',DB::raw('field3 having total<> 0'));
    
    YourMainModel::query()
    ->select('field1', 'field3','total')
    ->from(DB::raw("({$sub->toSql()}) as sub"))
    ->mergeBindings($sub->getQuery())
    ->groupBy('field1')
    ->get();
    
        2
  •  0
  •   Cyrille    6 年前

    我建议使用fromraw方法:

    $finalQuery = self::newQuery()->fromRaw("({$subQuery->toSql()}) as sub")