2017-09-14 34 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