求sql语句,主表与子表

xshf12345 2010-09-08 07:59:12
现有如下两张表,主表和子表
主表:
id	user_id	user_pwd	user_email
1 alexis 1111 123@126.com
2 ab 1234 1234@msn.com

子表:

edu_id user_id edu_name edu_date
1 1 大学 2010-10-01 00:00:00
2 1 高中 2006-09-01 00:00:00

通过主表的id和子表的user_id关联,
要求查询每个用户最高的学历信息,即查出来的结果是

id user_id user_pwd user_email edu_name edu_date
1 alexis 1111 123@126.com 大学 2010-10-01 00:00:00
2 ab 1234 1234@msn.com \N \N


请教sql语句怎么写?

当然我可以先把所有记录找出来,然后过滤,不过希望能够用sql直接写出来
...全文
348 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
xshf12345 2010-09-10
  • 打赏
  • 举报
回复
我是这样写的
SELECT users.*,
(SELECT edu_name FROM edu WHERE edu.user_id=users.id ORDER BY edu_date DESC LIMIT 1) AS name1
FROM users
wwwwb 2010-09-09
  • 打赏
  • 举报
回复
SELECT * FROM `users` a1 LEFT JOIN (
SELECT a.user_id,a.edu_name,a.edu_date FROM edu a
LEFT JOIN edu b ON a.user_id=b.user_id AND a.edu_date>=b.edu_date
GROUP BY a.user_id,a.edu_name,a.edu_date HAVING COUNT(*)=2) b1 ON a1.id=b1.user_id
ACMAIN_CHM 2010-09-08
  • 打赏
  • 举报
回复
mysql> select *
-> from (
-> select a.id,a.user_id,a.user_pwd,a.user_email,b.edu_name,b.edu_date
-> from users a left join edu b on a.id=b.user_id
-> order by a.id,b.edu_date desc
-> ) t
-> group by id;
+------+---------+----------+--------------+----------+---------------------+
| id | user_id | user_pwd | user_email | edu_name | edu_date |
+------+---------+----------+--------------+----------+---------------------+
| 1 | alexis | 1111 | 123@126.com | 大学 | 2010-10-01 00:00:00 |
| 2 | ab | 1234 | 1234@msn.com | NULL | NULL |
+------+---------+----------+--------------+----------+---------------------+
2 rows in set (0.03 sec)

mysql>
xshf12345 2010-09-08
  • 打赏
  • 举报
回复
结果是这样的
"id" "user_id" "user_pwd" "user_email" "edu_name" "edu_date"
"1" "alexis" "1111" "123@126.com" "大学" "2010-10-01 00:00:00"
"2" "ab" "1234" "1234@msn.com" \N \N
xshf12345 2010-09-08
  • 打赏
  • 举报
回复
呵呵,是mysql的,表结构如下:
/*
SQLyog 企业版 - MySQL GUI v8.14
MySQL - 5.1.45-community
*********************************************************************
*/
/*!40101 SET NAMES utf8 */;

create table `users` (
`id` double ,
`user_id` varchar (60),
`user_pwd` varchar (60),
`user_email` varchar (60)
);
insert into `users` (`id`, `user_id`, `user_pwd`, `user_email`) values('1','alexis','1111','123@126.com');
insert into `users` (`id`, `user_id`, `user_pwd`, `user_email`) values('2','ab','1234','1234@msn.com');


/*
SQLyog 企业版 - MySQL GUI v8.14
MySQL - 5.1.45-community
*********************************************************************
*/
/*!40101 SET NAMES utf8 */;

create table `edu` (
`edu_id` double ,
`user_id` double ,
`edu_name` varchar (150),
`edu_date` datetime
);
insert into `edu` (`edu_id`, `user_id`, `edu_name`, `edu_date`) values('1','1','大学','2010-10-01 00:00:00');
insert into `edu` (`edu_id`, `user_id`, `edu_name`, `edu_date`) values('2','1','高中','2006-09-01 00:00:00');



ACMAIN_CHM 2010-09-08
  • 打赏
  • 举报
回复

建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。
参考一下这个贴子的提问方式http://topic.csdn.net/u/20091130/20/8343ee6a-417c-4c2d-9415-fa46604a00cf.html

1. 你的 create table xxx .. 语句
2. 你的 insert into xxx ... 语句
3. 结果是什么样,(并给以简单的算法描述)
4. 你用的数据库名称和版本(经常有人在MS SQL server版问 MySQL)

这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。

ACMAIN_CHM 2010-09-08
  • 打赏
  • 举报
回复
select * from(
select a.*,b.*
from 主表 a inner join 子表 b on a.id=b.user_id
order by a.id,b.edu_id
) t
group by a.id
ACMAIN_CHM 2010-09-08
  • 打赏
  • 举报
回复
参考下贴中的多种方法

http://topic.csdn.net/u/20091231/16/2f268740-391e-40f2-a15e-f243b2c925ab.html
[征集]分组取最大N条记录方法征集,及散分....

56,681

社区成员

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

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