选择只有第一个出现的行记录的头记录
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
我有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