为了账号安全,请及时绑定邮箱和手机立即绑定

左联接并仅使用 LARAVEL 6.5.0 从右表中返回最新记录

左联接并仅使用 LARAVEL 6.5.0 从右表中返回最新记录

PHP
眼眸繁星 2022-09-12 10:14:22
Table 1----------NameID     Name------------------1           A2           B3           C-----------------Table 2--------------------ID   NameID   Order   --------------------1      1      Sugar2      1      Salt 3      2      Garlic 4      2      Sugar5      2      Onion6      3      Oil7      3      Black pepper 我只想从右表中返回最新的,每个nameID只有一条记录,我不知道要使用什么代码这是我想返回的结果RESULT----------------------------Name           Order---------------------------A              Salt  B              Onion    C              Black pepper控制器.phpreturn DB::table('table1')->leftjoin('table2','table1.nameID','=','table2.nameID')-get();
查看完整描述

3 回答

?
www说

TA贡献1775条经验 获得超8个赞

试试这个


$data = Table1::select('Table1.Name', 'Table2.Order','Table2.ID')

->leftJoin('Table2', function($query) {

   $query->on('Table1.NameID','=','Table2.NameID')

        ->whereRaw('Table2.ID IN (select MAX(a2.ID) from Table2 as a2 join Table1 as u2 on u2.NameID = a2.NameID group by u2.NameID)');

})->get();

编辑:


$data = Table1::select('Table1.Name', 'Table2.Order','Table2.ID')


查看完整回答
反对 回复 2022-09-12
?
森林海

TA贡献2011条经验 获得超2个赞

使用不存在来筛选


select Name, Order


from Table1 a 

inner join

(

Select a.NameID, Order from Table2 a 

where not exists(select 1 from Table2 b where a.NameID  = b.NameID  and a.ID < b.ID)

)b on a.NameID = b.NameID


查看完整回答
反对 回复 2022-09-12
?
米脂

TA贡献1836条经验 获得超3个赞

您可以尝试下面的脚本 -


SELECT B.NameID, B.Name, C.[Order]

FROM 

(

    SELECT Nameid,MAX(ID) ID

    FROM table_2

    GROUP BY NameID

)A

INNER JOIN Table_1 B ON A.NameID = B.NameID

INNER JOIN Table_2 C ON A.NameID = C.NameID AND A.ID = C.ID 


查看完整回答
反对 回复 2022-09-12
  • 3 回答
  • 0 关注
  • 112 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信