-1

selectクエリがありますが、結果に列としていくつかのカウントを含めたいと思います。t1行に関連付けられたt3行の数と、t2行に関連付けられたt3行の数をカウントします。そして、結果には列が含まれている必要があります:t1t3Count、t2t3Count。最初の行の場合、t1T3Countは5に等しく、t2t3countは5に等しい必要があります

create table t1 (id int, name text);
insert into t1 values(1, 'name1');
insert into t1 values(2, 'name2');
create table t2 (id int, t1Id int, name text);
insert into t2 values(1, 1, 't2name1');
insert into t2 values(2, 1, 't2name2');
insert into t2 values(3, 2, 't2name3');
create table t3 (id int, t2Id int, name text);
insert into t3 values(1, 1, 't3name1');
insert into t3 values(2, 1, 't3name2');
insert into t3 values(3, 1, 't3name3');
insert into t3 values(4, 2, 't3name3');
insert into t3 values(5, 2, 't3name3');
insert into t3 values(6, 3, 't3name3');

   mysql> select * from t1 join t2 on(t1.id=t2.t1Id) join t3 on(t2.id=t3.t2Id);
+------+-------+------+------+---------+------+------+---------+
| id   | name  | id   | t1Id | name    | id   | t2Id | name    |
+------+-------+------+------+---------+------+------+---------+
|    1 | name1 |    1 |    1 | t2name1 |    1 |    1 | t3name1 |
|    1 | name1 |    1 |    1 | t2name1 |    2 |    1 | t3name2 |
|    1 | name1 |    1 |    1 | t2name1 |    3 |    1 | t3name3 |
|    1 | name1 |    2 |    1 | t2name2 |    4 |    2 | t3name3 |
|    1 | name1 |    2 |    1 | t2name2 |    5 |    2 | t3name3 |
|    2 | name2 |    3 |    2 | t2name3 |    6 |    3 | t3name3 |
+------+-------+------+------+---------+------+------+---------+
4

1 に答える 1

1

さて、私が正しく理解していれば、t1からt2とt3の両方にすべてのアイテムの合計発生数をカウントしたいですか?

その場合、提供されるデータは次の結果になる必要があります

name1 = 5 {t2に2、t3}に3、name2 = 3 {1、t2に2、t3}に2

上記があなたが望むものであるならば、これはあなたが望むものです

SELECT 
      t1.id, t1.name, 
      COALESCE( t2Counts.t2Count, 000000 ) + COALESCE( t3Counts.t3Count, 000000 ) AS total_occurences_in_t2_and_t3
   FROM
      ( SELECT @t2Countt := 0,
               @t3Countt := 0
        ) sqlvars,
      t1
        LEFT JOIN ( SELECT t1Id, COUNT(*) AS t2Count
                       FROM t2
                       GROUP BY t1Id ) AS t2Counts
           ON t1.id = t2Counts.t1Id

        LEFT JOIN ( SELECT t2Id, COUNT(*) AS t3Count
                       FROM t3
                       GROUP BY t2Id ) AS t3Counts
           ON t1.id = t3Counts.t2Id

そして、私があなたをよりよく間違えた場合これをチェックしてくださいそれははるかに多くの説明があります

これがお役に立てば幸いです。

于 2012-05-15T11:20:07.913 に答える