2012-05-15 4 views
-1

select 쿼리가 있습니다.하지만 결과로 컬럼에 몇 개의 카운트를 갖고 싶습니다 : t1 행과 얼마나 많은 t3 행을, 그리고 얼마나 많은 t3 행을 t2 행과 연관 시켰는 지 계산하십시오. 결과에는 열이 있어야합니다 (t1t3Count, t2t3Count). 첫 번째 행의 경우 t1T3Count이 있어야 할 5로 동일하고, t2t3countmysql은 서브 쿼리에서 많은 카운트를받습니다.

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 | 
+------+-------+------+------+---------+------+------+---------+ 
+1

100 % 확신하지 못합니다. 원하는 출력을 보여주십시오. – eggyal

답변

1

글쎄, 난 당신이 모두 T2와 T3 우측으로 T1에서 모든 항목의 총 발생 수를 계산하려면 제대로 이해한다면? 그렇다면, 제공된 데이터는 상기 경우

NAME1 = 5 {T2 2, T3 3}과 NAME2 = 3 {T2 1, 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 

를 원하는 것입니다 당신이 다음 원하는이다 내가 Check this 더 잘 잘못 가지고 있다면 훨씬 더 설명이 줘야

희망이있다 내가 널 도와 줘.

관련 문제