我在编写MySQL查询时遇到了一些麻烦。我不知道如何描述我的问题,以便在网上搜索它,所以如果我的问题很愚蠢,那么很抱歉。mysql复杂连接
我有3个表:
CREATE TABLE posts(id INT, author INT);
CREATE TABLE users(id INT, nick varchar(64));
CREATE TABLE groups(id INT, name varchar(64));
CREATE TABLE membership (user INT, group INT, date INT) ;
成员包含有关加入一些组的用户信息。成员表中的“日期”是用户加入该组的时间。
我需要一个查询,它将返回一个帖子,其作者的昵称和具有最少加入日期的组的名称。
所有我现在是:
SELECT p.id, u.nick, g.name
FROM posts AS p
LEFT JOIN users AS u ON u.id = p.author
LEFT JOIN membership AS m ON m.user = p.author
LEFT JOIN groups AS g ON g.id = m.group
WHERE 1;
但当然它返回一个随机组的名称,而不是一个与最早加盟日期。
我也试过以下的变体:
SELECT p.id, u.nick, g.name
FROM posts AS p
LEFT JOIN users AS u ON u.id = p.author
LEFT JOIN
(SELECT * FROM membership WHERE 1 ORDER BY date ASC)
AS m ON m.user = p.author
LEFT JOIN groups AS g ON g.id = m.group
WHERE 1;
,但它给了我同样的结果。
我会感激甚至指向我可以开始的地方,因为此刻我不知道该如何处理它。
适当的[示例代码](http://sscce.org/)(对于SQL问题,意味着'CREATE TABLE'语句)比专用模式更有帮助。还要注意,使自动递增的列无符号可以使生成值的数量增加一倍(而不是问题中的表可能会达到许多条目)。 – outis 2011-12-17 21:39:24
谢谢,我已经从电影,游戏和技术文档中学到了英语,所以我认为至少我可以写一些说英语的人可以理解的东西是很好的。但下个月我打算吸取一些经验教训来更好地学习。 – navij 2011-12-17 22:18:19