我有两个表:
Labs
==========
LabID
==========
1
Messages
==========
Message
==========
Hello world
Hello world 2
我想加入两个表,所以输出变为:
=== Lab ID === Messages ===
1 Hello World
如果我做
select * from Labs l inner join Messages m on l.LabID = m.LabID
它两次打印出第一个ID,因为该表中有两条消息。我只想选择第一条消息。我尝试添加前1名,但这无济于事。我真的是SQL新手。
你似乎想要每个实验室的最新消息。一种选择是使用横向连接。假设该表messages
具有一个名为的外键列,该列labid
引用labs
,并且该列id
可用于对行进行排序,则可以将其表述为:
select l.*, m.mesage
from labs l
cross apply (
select top (1) * from messages m where m.labid = l.labid order by m.id desc
) m
如果要允许没有消息的实验室,请outer apply
改用。
另一种选择是row_number()
:
select l.*, m.mesage
from labs l
inner join (
select m.*, row_number() over(partition by labid order by id desc) rn
from messages m
) m on m.labid = l.labid and m.rn = 1