0

私は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 からのデータです。tbltrainAssign で trId =1 が 2 回割り当てられ、trId が 1tim 割り当てられます。結果は次のようになります

trId        trName       count
1          training1     2
2          training2     0
3          training3     1
4          training4     0
5          training5     0
6          training6     0
4

3 に答える 3

2

必要なのは、JOIN特に2 番目のテーブルに割り当てられていない一致しない sLEFT JOINを取得するための、シンプルでわかりやすいものです。trNameCOUNTGROUP 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;

SQL フィドルのデモ

補足:テーブルの名前と列の名前で使用している説明的な接頭辞を避けてtblくださいtr

更新:次のように、各トレーニングの個別の割り当てをカウントするには、割り当てテーブルから個別の日付を選択する必要があります。

SELECT t.trId, t.trname, COUNT(s.trId)
FROM tbltraining t
LEFT JOIN
(
  SELECT DISTINCT trId, DATE(date1), date(date2)
  FROM tbltrainAssign
) s ON t.trId = s.trId
GROUP BY t.trId, t.trname;

更新された SQL Fiddle デモ

于 2012-11-30T18:45:46.610 に答える
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

これにより、望ましい結果が得られます

于 2012-11-30T18:46:50.657 に答える
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
于 2012-11-30T18:47:33.303 に答える