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

Php Mysql,一对多关系,需要最新的,php,mysql,Php,Mysql,我已经很久没有使用MySQL了,在stackoverflow的帮助下,我学得很快。但这件事让我很难堪。我确信我在过去也做过类似的事情,但尽管尝试了一些事情,我还没有做到。我怀疑上次我不得不使用PHP代码来忽略重复的行,但我不太确定 我正在处理两张桌子。表1有一个每年唯一的记录,并引用了一个部门。表2存储了每个部门的负责人以及他们被任命的年份 Table 1 Table 2 Year | Dept Dept | Head | Since Year 1982

我已经很久没有使用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以来,它已经有了长足的发展。子查询在当时不是一件事,我想它们在这里可能会有所帮助?非常感谢您的建议。

寻求有关加入的信息

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

您不必使用子查询

只需选择有效的头两次,然后丢弃那些存在的头以后指定

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
选择t1.*,t2.Head
来自表1 t1
在t1.Dept=t2.Dept和t1.Year>=t2.加入表2`
左键连接t2.Dept=t22.Dept和t1.Year>=t22.“自年”和t2.“自年”
t2.`自年`
查找比当前负责人晚任命的负责人

其中t22.Head为空
仅选择没有后继项的Heads