gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 23:47:16 26 4
gpt4 key购买 nike

自从我使用 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 有了很大的进步。子查询在当时还不是问题,我认为它们在这里可能会有所帮助?任何建议表示赞赏。

最佳答案

您不必使用子查询。

只需选择两次有效的 Head,然后丢弃那些有后指定 Head 的 Head。

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

关于php - Mysql,一对多关系,需要最新的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31734844/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com