数据库里有2个表,一个表是员工表users(id,code,name),另一个表签到表qiandao(id,uid,qdDate),其中uid为users表的主键id。
我现在的需求是,使用一个select 取出每个员工的基本信息以及签到次数,如下:
id code name num
-----------------------
1 xx 小二 3
2 xx 小三 5
3 xx 小驴 7
------------------------------------------------------------------------------------
我写的sql 如下:select * ,(select count(*) from qiandao where uid=id ) as num from users
但是结果num一直为0,这是什么问题呢?
有其他解决方法吗?最好是一个sql语句来搞定。
测试的数据 希望能帮到你
谢谢。。
建议先用一个id值测试一下这个SQL:
select count(*) from qiandao where uid=id
--1、构造测试数据表 create table #users(id int,code varchar(50),name varchar(50)) create table #qiandao(id INT ,uid INT ,qdDate DATETIME) --2、构造测试数据 INSERT INTO #users SELECT 1,'x1','name1' UNION ALL SELECT 2,'x2','name2' UNION ALL SELECT 3,'x3','name3' INSERT INTO #qiandao SELECT 1,1,GETDATE() UNION ALL SELECT 2,1,GETDATE() UNION ALL SELECT 3,2,GETDATE() --3、查询用户信息+签到次数 SELECT t1.*,num=isnull(t2.num,0) FROM #users t1 LEFT JOIN (SELECT uid,num=COUNT(id) FROM #qiandao GROUP BY uid ) t2 ON t2.uid=t1.id --PS:你的问题出在子查询的id和uid是针对qiandao表的,而不是匹配的外部的users表,所有结果基本为0
select a.*,count(b.id) from user a left join qiandao b on a.id = b.uid
group by b.uid
我感觉挺简单的啊 为什么上面都搞得那么乱