2013-10-23 79 views
3

我在查詢兩個表格(student2014和notes2014)的數據,以便返回學生列表以及每個學生的筆記。要做到這一點,我現在用的是下面的select語句:只返回來自LEFT JOIN的最新結果

SELECT * 
FROM students2014 
LEFT JOIN notes2014 
ON students2014.Student = notes2014.NoteStudent 
WHERE students2014.Consultant='$Consultant' 
ORDER BY students2014.LastName 

這成功地給了我一個名單,但學生與一個以上的音符出現兩次,如:

  • 學生一個 - 注意:
  • 學生一個 - 注意:
  • 學生b - 注意:
  • 學生C - 注意:

etc ...

我只想爲每個學生顯示最新的筆記,因此只給每個學生列表一次。

希望有道理嗎?

回答

1

您需要使用子查詢連接studends表。像這樣的東西應該工作:

SELECT * 
FROM `students2014` 
LEFT JOIN (
    SELECT `note`, `NoteStudent` 
    FROM `notes2014` 
    HAVING `NoteID` = MAX(`NoteID`) 
    GROUP BY `NoteStudent` 
) `notes` 
ON `students2014`.`Student` = `notes`.`NoteStudent` 
WHERE `students2014`.`Consultant`='$Consultant' 
ORDER BY `students2014`.`LastName` 
+0

恐怕事實並非如此。每張紙幣都有一個稱爲NoteID的唯一ID,它是一個增量數字,因此最新的紙幣ID號更高。有沒有可能與此合作? –

+0

@PhilHowell好的,改變了查詢。它現在使用'NoteID'。如果它是一個'auto_increment'就像你說的那麼它應該工作 – hek2mgl

+0

我曾試着HAVING NoteID = MAX =(NoteID),但這似乎不起作用... –

0

嘗試(我沒有測試,但必須努力):

SELECT *, MAX(notes2014.notesID) as maxnoteid 
FROM students2014 
LEFT JOIN notes2014 ON students2014.Student = notes2014.NoteStudent 
WHERE students2014.Consultant='$Consultant' AND notes2014.notesID = maxnoteid 
GROUP BY students2014.ID 
ORDER BY students2014.LastName 
0
select 
    * 
from 
    `students2014`, 
    `notes2014` 
where 
    `students2014`.`Student` = `notes2014`.`atudent` 
    and `notes2014`.`id` in (
    select 
    'NoteStudent`, 
    max('NoteID`) as`MaxID` 
    from 
    `notes2014` 
    group by 
    `NoteStudent` 
)`