2017-09-14 76 views
0

我有两个表一个是用户和第二个是user_education.One用户可以有一个以上的教育上市,所以我想获得最新的用户教育上市SQL查询修正一对多表

users 
=============== 
1-id 
2-email 

member_experience 
============== 
1-id 
2-user_id 
3-designation 

用户ID 1在user_education 4个enteries,所以我想最后的记录进入用户

原来完整的查询是这样的

SELECT u.id,u.name,u.gender,u.email,file_managed.file_name,file_managed.file_path 
from users as u 

INNER JOIN member_experience on (SELECT uid FROM member_experience where member_experience.uid=u.id ORDER BY id DESC LIMIT 1)=u.id 

LEFT JOIN file_managed on file_managed.id= u.fid 

where u.user_type ='individual' AND u.gender='male' 


"INNER JOIN member_experience on (SELECT uid FROM member_experience where member_experience.uid=u.id ORDER BY id DESC LIMIT 1)=u.id " 

这部分具有亲的指定blem,因为用户在member_experience表中有很多记录,但是我只想得到最新的一个记录。

感谢

+1

在查询的表是不是在你的问题的人;很难知道你想要什么。 Member_experience可能就是你所说的user_education,但是如果是这样的话,你并没有从它中选择任何列,所以很难看出它是什么意思才能得到最新的 – ysth

+0

。其实很抱歉它是member_experience表我编辑帖子 – Pearl

+0

你想从最新的那个中得到什么?你不是从该表中选择任何东西 – ysth

回答

0

下放收购的最后一条记录到WHERE语句。

如果存在drop table member_experience; create table member_experience(id int auto_increment主键,userid int);

insert into member_experience (userid) values 
(1),(2),(1); 

select * from member_experience 

SELECT u.id,m.id 
from users as u 
join member_experience m on m.userid = u.id 
where m.id = (SELECT max(m.id) FROM member_experience m where m.userid = u.id) 
order by u.id 

或者,如果你想包括那些没有经验

SELECT u.id,m.id 
from users as u 
left join member_experience m on m.userid = u.id 
where (m.id = (SELECT max(m.id) FROM member_experience m where m.userid = u.id) 
     or m.id is null) 

     and u.id < 4 
order by u.id 
+0

感谢您的快速回复查询作品,但它只显示用户具有experience.I想获得所有用户,无论它有经验或不是,但如果他们有多个经验门户,那么只有最新的应该显示 – Pearl

+0

添加的代码包括那些没有经验的代码。 –

+0

相同的结果只有两个有经验的记录显示在我的db中应该显示9条记录。在where子句中,如果m.id = null,那么应该显示用户记录,但是如果用户在member_experience表中没有经验记录应该这个查询工作 – Pearl