Mysql,一对多的关系,需要最新的

时间:2015-07-30 22:01:22

标签: php mysql

很长一段时间以来,我一直在使用MySQL,而且我学得很快,并且在此过程中提供了很多来自stackoverflow的帮助。这个让我很难过。我确定我过去曾做过类似的事情,但尽管尝试过一些事情我还没有实现。我怀疑上次我不得不利用PHP代码来忽略重复的行,但我不太确定。

我正在使用两张桌子。表1每年都有一个独特的记录,并提到了一个部门。表2列出了每个部门的负责人以及他们被任命的年份。

Table 1          Table 2
Year | Dept      Dept | Head       | Since Year
1982 | 1         1    | Hutchinson | 1979
1983 | 2         1    | Holroyd    | 1983
1984 | 2         1    | Farrey     | 1987
1985 | 2         2    | Mainwaring | 1983
1986 | 1         2    | Blanche    | 1985
1987 | 2         3    | Sunt       | 1986
1988 | 3

我需要的是一个查询,该查询返回有关年份的被引用部门的负责人。像这样:

1982 | 1 | Hutchinson
1983 | 2 | Mainwaring
1984 | 2 | Mainwaring
1985 | 2 | Blanche
1986 | 1 | Holroyd
1987 | 2 | Blanche
1988 | 3 | Sunt
自从我上次使用MySQL以来,MySQL已经发展了很多。子查询当时不是一件事,我认为他们可能会在这里提供帮助吗?任何建议表示赞赏。

2 个答案:

答案 0 :(得分:0)

您不必使用子查询。

只需选择两次有效的头部,然后丢弃那些存在头部的头部。

SELECT t1.*,t2.Head 
FROM Table1 t1
JOIN Table2 t2 ON t1.Dept = t2.Dept AND t1.Year >= t2.`Since Year`
LEFT JOIN Table2 t22 ON t2.Dept = t22.Dept AND t1.Year >= t22.`Since Year` AND t2.`Since Year` < t22.`Since Year` 
WHERE t22.Head IS NULL

t2.`Since Year` < t22.`Since Year`找到当前负责人后任命的负责人

WHERE t22.Head IS NULL仅选择没有继任者的头衔

Demo

答案 1 :(得分:-1)

寻求有关联接的信息

SELECT T1.Year, T1.Dept, T2.Head
FROM Table 1 AS T1
INNER JOIN  Table 2 AS T2 ON T1.Dept=T2.Dept