日期:2014-05-19  浏览次数:20507 次

如何用一个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