选择只有第一个出现的行记录的头记录

Selecting head records with only the first occurring line record

我有2张桌子。 SHead 和 SLine

id - title - origin - Status - datetime

S线

id - sid - datetime - body

我想 select 来自 SHead 的所有记录,其中 origin = 4。不过我只想要来自 SLine 的第一个记录行。

因此,如果我在 SHead 中有一行用于 origin=4 并且在 SLine 中有两行相关,我只想 return 一行。这可能吗?

这是一个典型的方式:

select h.*, l.*
from shead h join
     sline l
     on l.sid = h.id
where s.original = 4 and
      l.datetime = (select min(l2.datetime) from sline l2 where l2.sid = l.sid);

这是使用 INNER JOIN

的一种方法
SELECT sh.*,
       s1.*
FROM   SLine s1
       JOIN (SELECT Min(datetime) min_dt,
                    sid
             FROM   SLine
             GROUP  BY sid) s2
         ON s2.min_dt = s1.datetime
            AND s2.sid = s1.sid
       JOIN SHead sh
         ON sh.id = s1.sid