一个让我纠结的sql 请高手指教

拔萝卜的Tank 2012-05-31 10:35:24

DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`id` int(11) NOT NULL auto_increment,
`version` int(11),
`name` varchar(80),
`createtime` timestamp not null default current_timestamp,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

insert into user (version,name) values (1,'ua');
insert into user (version,name) values (2,'ub');
insert into user (version,name) values (3,'uc');

DROP TABLE IF EXISTS `posts`;
CREATE TABLE `posts` (
`id` int(11) NOT NULL auto_increment,
`uid` int(11),
`version` int(11),
`context` varchar(80),
`createtime` timestamp not null default current_timestamp,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;


insert into posts (uid,version,context) values (1,1,'pa1');
insert into posts (uid,version,context) values (1,2,'pb1');
insert into posts (uid,version,context) values (1,3,'pc1');


insert into posts (uid,version,context) values (2,4,'pa2');
insert into posts (uid,version,context) values (2,5,'pb2');
insert into posts (uid,version,context) values (2,6,'pc2');


insert into posts (uid,version,context) values (3,7,'pa3');
insert into posts (uid,version,context) values (3,8,'pb3');
insert into posts (uid,version,context) values (3,9,'pc3');

DROP TABLE IF EXISTS `replies`;
CREATE TABLE `replies` (
`id` int(11) NOT NULL auto_increment,
`pid` int(11),
`version` int(11),
`comment` varchar(80),
`createtime` timestamp not null default current_timestamp,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

insert into replies (pid,version,comment) values (1,1,'ra1');
insert into replies (pid,version,comment) values (1,2,'rb1');
insert into replies (pid,version,comment) values (1,3,'rc1');

insert into replies (pid,version,comment) values (2,4,'ra2');
insert into replies (pid,version,comment) values (2,5,'rb2');
insert into replies (pid,version,comment) values (2,6,'rc2');


insert into replies (pid,version,comment) values (3,7,'ra3');
insert into replies (pid,version,comment) values (3,8,'rb3');
insert into replies (pid,version,comment) values (3,9,'rc3');


insert into replies (pid,version,comment) values (4,10,'ra4');
insert into replies (pid,version,comment) values (4,11,'rb4');
insert into replies (pid,version,comment) values (4,12,'rc4');


insert into replies (pid,version,comment) values (5,13,'ra5');
insert into replies (pid,version,comment) values (5,14,'rb5');
insert into replies (pid,version,comment) values (5,15,'rc5');

insert into replies (pid,version,comment) values (6,16,'ra6');
insert into replies (pid,version,comment) values (6,17,'rb6');
insert into replies (pid,version,comment) values (6,18,'rc6');

insert into replies (pid,version,comment) values (7,19,'ra7');
insert into replies (pid,version,comment) values (7,20,'rb7');
insert into replies (pid,version,comment) values (7,21,'rc7');

insert into replies (pid,version,comment) values (8,22,'ra8');
insert into replies (pid,version,comment) values (8,23,'rb8');
insert into replies (pid,version,comment) values (8,24,'rc8');

insert into replies (pid,version,comment) values (9,25,'ra9');
insert into replies (pid,version,comment) values (9,26,'rb9');
insert into replies (pid,version,comment) values (9,27,'rc9');

想要的得到的结果集!
得到每个用户最新的帖子和最新的回帖记录
+------+------+------+--------------+----------------+
| uid | pid | rid | postsversion | repliesversion |
+------+------+------+--------------+----------------+
| 1 | 3 | 9 | 3 | 9 |
| 2 | 6 | 18 | 6 | 18 |
| 3 | 9 | 27 | 9 | 27 |
+------+------+------+--------------+----------------+
...全文
36 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
拔萝卜的Tank 2012-05-31
  • 打赏
  • 举报
回复
谢谢楼上的!请问还有没有其他的方法的呢?不采用子查询!
ACMAIN_CHM 2012-05-31
  • 打赏
  • 举报
回复
mysql> select u.id,p.id,r.id,p.version as postsversion,r.version as repliesversion
-> from user u ,posts p,replies r
-> where u.id=p.uid
-> and p.id=r.pid
-> and not exists (select 1 from posts where uid=p.uid and id>p.id)
-> and not exists (select 1 from replies where pid=r.pid and id>r.id);
+----+----+----+--------------+----------------+
| id | id | id | postsversion | repliesversion |
+----+----+----+--------------+----------------+
| 1 | 3 | 9 | 3 | 9 |
| 2 | 6 | 18 | 6 | 18 |
| 3 | 9 | 27 | 9 | 27 |
+----+----+----+--------------+----------------+
3 rows in set (0.00 sec)

mysql>
wwwwb 2012-05-31
  • 打赏
  • 举报
回复
+------+------+------+--------------+----------------+
| uid | pid | rid | postsversion | repliesversion |
+------+------+------+--------------+----------------+
| 1 | 3 | 9 | 3 | 9 |

9、3、9怎么得到的

56,677

社区成员

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

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