2015-05-13 54 views
-1

我需要从一个表(tbl_b)获取用户结果并获得另一个表(tbl_a)的ID的计数。需要从另一个表中添加COUNT COUNT到另一个表中

tbl_b: 

ID  NAME  LAST_NAME   UNTIL_DATE 
================================================ 
1  Sharon  Alexander   2016-04-01 
2  David  Lynn    2014-04-01 
3  Jason  Rominsky   2015-04-01 


tbl_a: 

ID  
== 
1 
2 
3 
4 
5 
6 

而且(显然错误)查询:

SELECT tbl_b.ID, tbl_b.NAME, tbl_b.LAST_NAME, COUNT(tbl_a.ID) as TOTAL 
FROM tbl_a, tbl_b 
WHERE tbl_b.UNTIL_DATE>=NOW() 

我需要选择从tbl_b人的名单一起共从tbl_a的登录(每个登录有一个ID)。 如果tbl_b为空或UNTIL_DATE小于NOW(),结果TOTAL将等于0,这是错误的。 (结果必须是正号)

回答

2

使用相关子查询数:

SELECT tbl_b.ID, tbl_b.NAME, tbl_b.LAST_NAME, 
     (select COUNT(*) from tbl_a where tbl_a.id = tbl_b.id) as TOTAL 
FROM tbl_b 
WHERE tbl_b.UNTIL_DATE >= NOW() 

或者做一个左外连接与GROUP BY

SELECT tbl_b.ID, tbl_b.NAME, tbl_b.LAST_NAME, COUNT(tbl_a.ID) as TOTAL 
FROM tbl_b LEFT JOIN tbl_a ON tbl_a.id = tbl_b.id 
WHERE tbl_b.UNTIL_DATE >= NOW() 
GROUP BY tbl_b.ID, tbl_b.NAME, tbl_b.LAST_NAME 
1

试试这个,我用MSSQL

SELECT tbl_b.ID, tbl_b.NAME, tbl_b.LAST_NAME, ISNULL(Logins.TOTAL_LOGINS, 0) as TOTAL 
FROM tbl_b 
LEFT JOIN 
(SELECT ID, COUNT(*) as TOTAL_LOGINS FROM tbl_a GROUP BY ID) as Logins 
ON tbl_b.ID = Logins.ID WHERE tbl_b.UNTIL_DATE >= NOW() 
相关问题