【问题标题】:Limit this JOIN query so one result for each left-side table is returned?限制此 JOIN 查询,以便为每个左侧表返回一个结果?
【发布时间】:2014-09-14 16:03:50
【问题描述】:

我有这两张表:

Person:
+----+-------+
| ID | name  |
+----+-------+
|  1 | John  |
|  2 | Frank |
+----+-------+

Position:
+----+---------+----------+------------+
| ID | name    | personID | startDate  |
+----+---------+----------+------------+
|  1 | Cashier | 1        | 2013-01-01 |
|  2 | Manager | 1        | 2013-04-23 |
|  3 | Cashier | 2        | 2014-02-01 |
+----+---------+----------+------------+

Position 表跟踪一个人所持有的各种职位。

如何创建一个显示每个人及其当前职位的列表(该职位的开始日期是最新的)?本质上我需要限制Position 表的JOIN 只返回一个结果。

我尝试了以下代码。

SELECT p.id, h.positionID FROM person p JOIN position h ON p.id = h.personID

【问题讨论】:

  • LIMITing an SQL JOIN的可能重复
  • 你有没有试过任何代码?
  • @JamesHunt 这似乎要求相反,限制桌子的左侧。我想限制右边。
  • @Gunaseelan 除了正常的加入,我没有太多东西。我搞砸了子查询,但一直碰壁。 SELECT p.id, h.positionID FROM person p JOIN position h ON p.id = h.personID

标签: mysql sql


【解决方案1】:

尝试以下方法:-

select p.ID, pp.name PersonName, p.name PositionName ,p.startDate 
from Position p
inner join
(select personID, max(startDate) sdate from Position group by personID) as a
on p.personID = a.personID and p.startDate = a.sdate
left join Person pp
on pp.ID = p.personID  

然而,强烈建议您发布您尝试过的代码。

SQL Fiddle

【讨论】:

  • 我将left join 设置为inner join 分别得到一个结果。
猜你喜欢
  • 2020-01-30
  • 2012-07-08
  • 2014-06-03
  • 2015-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多