很长一段时间以来,我一直在使用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已经发展了很多。子查询当时不是一件事,我认为他们可能会在这里提供帮助吗?任何建议表示赞赏。
答案 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
仅选择没有继任者的头衔
答案 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