如何用一个LEFT JOIN查询忽略重复记录?
用户表user结构如下:
id(int,主键)
username(nvarchar)
数据如下:
id username
1 张三
2 李四
3 王五
每日生产记录表detail结构如下:
id(int,主键)
userid(int,关联user表的id)
posttime(smalldatetime)
content(nvarchar)
数据如下:
id userid posttime content
1 1 2007-1-22 test1
2 2 2007-1-22 test2
3 1 2007-1-22 test3
==========================================
现在的要求是读出用户每天的记录,表detail中每天每用户可能会有多条记录,但结果只显示1条(暂不考虑合理性吧。。。)
例如查询显示的结果如下:
username posttime content
张三 2007-1-22 test1
李四 2007-1-22 test2
王五 NULL NULL
我现在的语句是:
SELECT a.username, b.posttime, b.content FROM user a LEFT JOIN detail b
ON a.id = b.userid WHERE b.id IN(SELECT id FROM detail a WHERE id IN(SELECT MAX(id) FROM detail b WHERE a.userid = b.userid))
结果如下:
==============================
username posttime content
张三 2007-1-22 test3
李四 2007-1-22 test2
==============================
上面的查询语句可以忽略重复记录,但是也去掉了其他在detail表中没有记录的用户
请问大家按照目前的情况应该怎么写查询语句?
------解决方案--------------------select a.username,b.posttime,b.content
from user a left join
(select n.* from detail n where n.id in
(select m.id from (select min(id) id,userid
from detail
group by userid) m) b on a.id=b.userid
------解决方案--------------------create table #user
(id int,
username nvarchar(50)
)
create table #detail
(id int,
userid int,
posttime smalldatetime,
content nvarchar(50)
)
inser