簡體   English   中英

MySQL,一對多關系,需要最新

[英]Mysql, one to many relationship, need most recent

自從我使用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一直在發展。 子查詢在那時還不算什么,我想它們可能會在這里有所幫助? 任何建議表示贊賞。

您不必使用子查詢。

只需選擇兩次有效的負責人,然后丟棄后來指定的存在負責人的人。

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情況下,僅選擇沒有后繼的Heads

演示版

尋求有關聯接的信息

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM