问题描述
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查询。就像我用查询生成器进行内部联接,而不是左联接。
解决方法
在您的第一个查询中,没有“ 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');
})