2016-11-18 81 views
0

我使用laravel 5.3,并且我在laravel查询方法中有一些左连接查询错误。 这是我的正常查询Laravel左加入查询

SELECT bran.branchName,sch.schoolName From m_schoolbranch bran 
LEFT JOIN m_students stu ON stu.schoolNo=bran.schoolNo AND stu.branchNo=bran.branchNo 
LEFT JOIN m_school sch ON sch.schoolNo=stu.schoolNo where stu.userNo='0000000001'; 

这是我的新laravel查询

DB::table('m_schoolbranch') 
      ->join('m_students', 'm_schoolbranch.schoolNo', '=', 'm_students.schoolNo') 
      ->join('m_students', 'm_schoolbranch.branchNo', '=', 'm_students.branchNo') 
      ->join('m_school', 'm_schoolbranch.schoolNo', '=', 'm_school.schoolNo') 
      ->select('m_school.schoolName', 'm_schoolbranch.branchName') 
      ->where('m_students.userNo',$userNo) 
      ->get(); 

在这些查询我需要匹配表m_students两名栏,所以我把这样的

->join('m_students', 'm_schoolbranch.branchNo', '=', 'm_students.branchNo') 

但我显示错误...

+0

什么错误说? – RustamG

+0

Connection.php中的QueryException 729行: SQLSTATE [42000]:语法错误或访问冲突:1066非唯一表/别名:'m_students'(SQL:select'm_school'.'schoolName','m_schoolbranch'.'ranchName'从'm_schoolbranch'内连接'm_students'在'm_schoolbranch'.'schoolNo''''m_students'.'schoolNo'内连接'm_students'在'm_schoolbranch'.'branchNo' ='m_students'.'branchNo' inner join'm_school ''m_schoolbranch'.'schoolNo' ='m_school'.'schoolNo' where'm_students'.'userNo' = 0000000001) –

回答

0

查询中的表需要具有唯一的n否则在评估m_schoolbranch.schoolNo时,DB无法知道应使用哪个m_schoolbranch

您可以在连接语句中使用唯一的表别名,但我建议在连接上使用多个条件。就像您在原始SQL查询中使用一样。看到这里:https://stackoverflow.com/a/20732468/4437888

+0

Thnx我用你的代码解决了它。 –

0
DB::table('m_schoolbranch') 
      ->join('m_students', function($join) 
       { 
        $join->on('m_schoolbranch.schoolNo', '=', 'm_students.schoolNo'); 
        $join->on('m_schoolbranch.branchNo', '=', 'm_students.branchNo'); 
       }) 
      ->join('m_school', 'm_schoolbranch.schoolNo', '=', 'm_school.schoolNo') 
      ->select('m_school.schoolName', 'm_schoolbranch.branchName') 
      ->where('m_students.userNo',$userNo) 
      ->get();