为什么我在Laravel查询生成器中得到不同的结果

问题描述

所以我试图将此SQL查询转换为laravel查询生成

select jenis_data.id_jenisdata,jenis_data.id_level,jenis_data.nama_data,detail_A.id_kecamatan,satuan.satuan,detail_A.tahun,detail_A.angka as tahun_2018,detail_B.angka as tahun_2019,opd.id_opd,detail_A.id_bidang,detail_A.id_detaildata,opd.wali_data,jenis_data.perkecamatan from jenis_data

    left join detail_data as detail_A on jenis_data.id_jenisdata = detail_A.id_jenisdata
    left join opd on detail_A.id_opd = opd.id_opd
    left join satuan on jenis_data.id_satuan = satuan.id_satuan
    left join detail_data as detail_B on detail_A.id_jenisdata = detail_B.id_jenisdata
    AND detail_A.tahun = 2018 
    AND detail_B.tahun = 2019
    group by jenis_data.id_jenisdata,detail_A.id_kecamatan

然后我想到了这个查询生成

DB::table('jenis_data')
    ->select('jenis_data.id_jenisdata','jenis_data.id_level','jenis_data.nama_data','detail_A.id_kecamatan','satuan.satuan','detail_A.tahun','detail_A.angka as tahun_2018','detail_B.angka as tahun_2019','opd.id_opd','detail_A.id_bidang','opd.wali_data','jenis_data.perkecamatan')
    
    ->leftJoin('detail_data as detail_A','jenis_data.id_jenisdata','=','detail_A.id_jenisdata')
    ->leftJoin('opd','detail_A.id_opd','opd.id_opd')
    ->leftJoin('satuan','jenis_data.id_satuan','satuan.id_satuan')
    ->leftJoin('detail_data as detail_B','detail_A.id_jenisdata','detail_B.id_jenisdata')
    ->where('detail_A.tahun','2018')
    ->where('detail_B.tahun','2019')
    ->groupBy('jenis_data.id_jenisdata','detail_A.id_kecamatan')
    ->get();

问题是我得到了不同的结果,laravel查询构建器的结果少于SQL查询。就像我用查询生成器进行内部联接,而不是左联接。

result from sql query

result from query builder

解决方法

在您的第一个查询中,没有“ where”子句。

在查询生成器中...

->leftJoin('detail_data as detail_B',function ($join) {
    $join->on('detail_A.id_jenisdata','=','detail_B.id_jenisdata')
        ->where('detail_A.tahun','2018')
        ->where('detail_B.tahun','2019');
})

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...