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

Table 1

----------

NameID     Name

------------------

1           A

2           B

3           C

-----------------


Table 2

--------------------

ID   NameID   Order   

--------------------

1      1      Sugar

2      1      Salt 

3      2      Garlic 

4      2      Sugar

5      2      Onion

6      3      Oil

7      3      Black pepper 

我只想从右表中返回最新的,每个nameID只有一条记录,我不知道要使用什么代码


这是我想返回的结果


RESULT

----------------------------

Name           Order

---------------------------

A              Salt  

B              Onion    

C              Black pepper

控制器.php


return DB::table('table1')

->leftjoin('table2','table1.nameID','=','table2.nameID')

-get();


眼眸繁星
浏览 113回答 3
3回答

www说

试试这个$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')

森林海

使用不存在来筛选select Name, Orderfrom Table1 a&nbsp;inner join(Select a.NameID, Order from Table2 a&nbsp;where not exists(select 1 from Table2 b where a.NameID&nbsp; = b.NameID&nbsp; and a.ID < b.ID))b on a.NameID = b.NameID

米脂

您可以尝试下面的脚本 -SELECT B.NameID, B.Name, C.[Order]FROM&nbsp;(&nbsp; &nbsp; SELECT Nameid,MAX(ID) ID&nbsp; &nbsp; FROM table_2&nbsp; &nbsp; GROUP BY NameID)AINNER JOIN Table_1 B ON A.NameID = B.NameIDINNER JOIN Table_2 C ON A.NameID = C.NameID AND A.ID = C.ID&nbsp;
打开App,查看更多内容
随时随地看视频慕课网APP