2014-10-02 93 views
1

我有一个用户,并且与每个用户在一个一对多的关系笔记数据库中的最后一场比赛。如何只包括在SQL查询

我想做一个查询,返回用户的详细信息,包括最近的笔记,这是关于它们的。

为了说明这里的数据的一个例子:

enter image description here

所以对于用户David包括在结果的说明应note.id = 6和约翰note.id = 3的实例。

SELECT user.firstname, 
     user.lastname, 
     note.note 
LEFT JOIN note 
ON note.userID = user.id 

什么可以添加到此SQL查询,只包括每个用户最后添加的笔记?

+2

这是一个常见问题的东西。有人可能会在一分钟内(正确)的答案一起,但它可能是一个主意,试图寻找的东西类似 – Strawberry 2014-10-02 16:33:15

+0

可能重复[SQL连接:在一个一对多的关系选择的最后一个记录(HTTP ://stackoverflow.com/questions/2111384/sql-join-selecting-the-last-records-in-a-one-to-many-relationship) – Nickolay 2014-10-02 19:28:40

+0

感谢Nickolay,我会检查出 – dlofrodloh 2014-10-02 19:36:10

回答

1

添加where子句和从MAX(id)可用。

WHERE note.id = (SELECT MAX(id) FROM note) 

编辑:

SELECT user.firstname, 
     user.lastname, 
     note.notes 
FROM user 
LEFT JOIN note ON note.userid = user.id 
WHERE note.id = (SELECT MAX(id) FROM note 
        WHERE note.userid = user.id) 
OR note.userid IS NULL --EDIT 
+0

我只是去尝试并且它仅返回具有多个注释的用户。数据库中只有一个注释或没有注释的用户不会被返回。你知道我该如何解决这个问题吗?谢谢 – dlofrodloh 2014-10-02 16:53:22

+0

尝试添加一个里面。 (... from note where note.userid = user.id) – Arun 2014-10-02 16:55:55

+0

不起作用 – dlofrodloh 2014-10-02 17:01:39

0
SELECT firstname, lastname, note 
FROM user u 
LEFT JOIN (SELECT * 
      FROM note 
      ORDER BY id DESC) n 
ON u.id = n.userid 
GROUP BY u.id 
+0

在标准SQL中,未列出GROUP BY子句的列是无效的。虽然MySQL允许你这样做,“所选择的值是不确定的。此外,每个组的值的选择不能通过添加ORDER BY子句来影响”per http://dev.mysql.com/doc/refman/5.0 /en/group-by-extensions.html – Nickolay 2014-10-02 19:12:33

+0

在http://sqlfiddle.com/#!2/8e55e/26 – 2014-10-02 20:40:37

+0

测试你肯定不是这个意思作为参数,该解决方案是正确的? – Nickolay 2014-10-02 21:46:39