如何编写mysql查询从2 sql查询中获取数据?

时间:2012-11-30 18:40:13

标签: mysql

我有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

3 个答案:

答案 0 :(得分:2)

您需要的是一个简单,直截了当,JOIN尤其LEFT JOIN来获得第二个表中没有作业的不匹配的trNameCOUNT和{ {1}}喜欢这样:

GROUP BY

SQL Fiddle Demo

不支持:请避免使用表格名称中使用的描述性前缀,并列出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

Updated SQL Fiddle Demo

答案 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