两表一对多,left join ,右表只取符合记录的前N条,左表为一,右表为多,

northenwolf1 2018-06-15 03:16:18
sql如何写
CREATE TABLE `topic` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`title` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB;

CREATE TABLE `comment` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`topicId` int(11) DEFAULT NULL,
`comment` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB;

INSERT INTO `topic` VALUES ('1', '话题1');
INSERT INTO `topic` VALUES ('2', '话题2');

INSERT INTO `comment` VALUES ('1', '1', 't1c1');
INSERT INTO `comment` VALUES ('2', '1', 't1c2');
INSERT INTO `comment` VALUES ('3', '2', 't2c1');
INSERT INTO `comment` VALUES ('4', '2', 't2c2');
INSERT INTO `comment` VALUES ('5', '2', 't2c3');
...全文
2433 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_39099280 2018-06-29
  • 打赏
  • 举报
回复
select * from
(select * from topic limit 0,n) a --取符合记录的前几条
left join comment b on a.id=b.topicId
verejava 2018-06-17
  • 打赏
  • 举报
回复
northenwolf1 2018-06-15
  • 打赏
  • 举报
回复
select * from ( SELECT tmp.id, tmp.commentId, @aid:=tmp.id as aid, if(@aid=tmp.id,@rank:=@rank+1,@rank:=1) as rank FROM ( SELECT a.id, b.id commentId FROM topic a LEFT JOIN `comment` b ON a.id = b.topicId ORDER BY b.id ) tmp, (SELECT @aid:= null , @rank:=0) t ) f where f.rank <=2
ACMAIN_CHM 2018-06-15
  • 打赏
  • 举报
回复
参考下贴中的多种方法 http://blog.csdn.net/acmain_chm/article/details/4126306 [征集]分组取最大N条记录方法征集,及散分....

56,678

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧