我有2张桌子
tbltraining
trId(PK) trname
------- ------
1 training1
2 training2
3 training3
4 training4
5 training5
6 training6
tbltrainAssign
trassigno trId(FK) date1 date2
--------- ------ ----------- ----------
1 1 12/12/2012 12/12/2013
1 1 12/12/2012 12/12/2013
2 3 01/12/2012 08/12/2013
2 3 01/12/2012 08/12/2013
2 3 01/12/2012 08/12/2013
3 1 02/12/2012 12/12/2013
3 1 12/12/2012 12/12/2013
我想要的是来自tbltraining的数据和赋值的数量。 trId = 1被分配2次,trId被分配给tbltrainAssign中的1tim。所以结果看起来应该是
trId trName count
1 training1 2
2 training2 0
3 training3 1
4 training4 0
5 training5 0
6 training6 0
答案 0 :(得分:2)
您需要的是一个简单,直截了当,JOIN
尤其LEFT JOIN
来获得第二个表中没有作业的不匹配的trName
,COUNT
和{ {1}}喜欢这样:
GROUP BY
不支持:请避免使用表格名称中使用的描述性前缀,并列出SELECT t.trId, t.trname, COUNT(s.trId)
FROM tbltraining t
LEFT JOIN tbltrainAssign s ON t.trId = s.trId
GROUP BY t.trId, t.trname;
和tbl
的名称。
更新:您必须从分配表中选择不同的日期,以便计算每项培训的不同分配,如下所示:
tr
答案 1 :(得分:1)
select a.trId trId,a.trName trName,count(distinct b.trssigno) count
from tbltraining a, tbltrainAssign b
where a.trId=b.trId
group trId,trName
order by trId
这将给出期望的结果
答案 2 :(得分:0)
select t.trId, t.trname, count(t.trassigno) from (
select tb.trId, tb.trname, ta.trassigno from tbltrainAssign ta
inner join tbltraining tb on ta.trId=tb.trId
) t
group by t.trId, t.trname