laravel:错误:使用联接,原始和在查询中

时间:2019-11-26 08:21:13

标签: mysql laravel laravel-5

我使用laravel框架。我写了这个查询,但显示出一个错误:

错误:

SQLSTATE[42S22]: Column not found: 1054 Unknown column 'schools.grade' in 'field list' (SQL: select `students`.`name`, `students`.`lastname`, students.id, max(`schools.grade`) as `grade` from `students` inner join `schools` on `schools`.`id` = `students`.`id` group by `schools`.`id` having `grade` = 6)

我的代码:

$stu = students::join('schools', 'schools.id',"=", 'students.id')
            ->select('students.name','students.lastname',DB::raw('students.id, max(`schools.grade`) as `grade`'))
            ->groupBy('schools.id')
            ->having('grade','=',$grade)
            ->get();
        dd($stu);

怎么了?

5 个答案:

答案 0 :(得分:0)

$stu = students::join('schools as s', 's.id',"=", 'students.id')
            ->select('students.name','students.lastname','students.id, 
               DB::raw(max(`s.grade`) as `grade`')) // make sure grade exist in school? if in student then use students.grade in db:Row
            ->groupBy('s.id')
            ->having('grade','=',$grade)
            ->get();

答案 1 :(得分:0)

你这样写。...

   $stu = students::join('schools', 'schools.id',"=", 'students.id')
        ->select('students.name','students.lastname',DB::raw('students.id,max(`schools.grade`) as `grade`'))
        ->groupBy('schools.id')
        ->having('schools.grade','=',$grade)->get();
    dd($stu);

答案 2 :(得分:0)

第一件事是您要验证grade表中是否有列schools,因为这很可能就是问题所在。

如果您起诉它确实存在,那么也尝试在having条件下使用表名:

$stu = students::join('schools', 'schools.id',"=", 'students.id')
            ->select('students.name','students.lastname',DB::raw('students.id, max(`schools.grade`) as `grade`'))
            ->groupBy('schools.id')
            ->having('schools.grade','=',$grade)
            ->get();
dd($stu);

答案 3 :(得分:0)

在这里

$stu = students::join('schools', 'schools.id',"=", 'students.id')
            ->select('students.name','students.lastname',DB::raw('students.id, max(`schools.grade`) as `grade`'))
            ->groupBy('schools.id')
            ->having('schools.grade','=',$grade)  // please chnage your code here..
            ->get();

答案 4 :(得分:0)

我检查了这两个查询作为测试,它们分别工作。但是主查询(我首先提到)可能无法正常工作。

DB::table('schools')
         ->select(DB::raw('id, max(`grade`) as `grade`'))
          ->groupBy('id')
          ->having('grade','=',$grade)
         ->get();

和:

$stu = students::join('schools', 'schools.id',"=", 'students.id')
         ->select('students.name','students.lastname','students.id','schools.grade')
           ->where('schools.grade','=',$grade)  
           ->get();
相关问题