1

Master と slave の 2 つのテーブルがあるとします。マスター テーブルには master_name と master_id が含まれ、スレーブ テーブルには Slave_id、slave_name と master_id があります。

サンプルデータ。

master_id Master_name  Master_status      slave_id  slave_name  master_id status
1         x               online              1          a          1       online
2         y               online              2          b          1       online
3         z               offline             3          c          2       offline
                                              4          d          3       offline
                                              5          e          3       online

私が取得しようとしている期待される結果は、

master_id  no_of_slave
   1             2
   2             0

各オンラインマスターが持っているオンラインスレーブの番号を取得したい。

編集が遅くなってすみません。

4

7 に答える 7

5

LEFT JOIN次のように使用します。

SELECT m.master_id
     , count(s.slave_id) AS no_of_slave
FROM master m 
LEFT JOIN slave s 
     ON m.master_id = s.master_id
GROUP BY m.master_id;

結果:

╔═══════════╦═════════════╗
║ MASTER_ID ║ NO_OF_SLAVE ║
╠═══════════╬═════════════╣
║         1 ║           2 ║
║         2 ║           1 ║
║         3 ║           2 ║
╚═══════════╩═════════════╝

このSQLFiddleを参照してください

于 2013-05-29T11:25:59.520 に答える
1

以下のクエリを使用します。

Select m.master_id, count(s.master_id) as no_of_slave 
       FROM master m 
            JOIN slave s 
            ON m.master_id = s.master_id
            GROUP By m.master_id;
于 2013-05-29T11:27:17.397 に答える
0
select 
    a.master_id,
    count(b.slave_id) 
from 
    master a,
    slave b 
where 
     a.master_id=b.master_id 
group by 
     a.master_id
于 2013-05-29T11:26:09.297 に答える
0
select    master_id, count(1)
from      Slave
group by  master_id
order by  master_id

スレーブを持つマスターを提供するだけで、テーブルが大きい場合はマスターと結合する必要さえありません

于 2013-05-29T11:26:48.980 に答える
0

これを使用できます。これは機能します。

select m.master_id,(select count(*) from slave s where s.master_id = m.master_id) as no_of_slave from master m
于 2013-05-29T11:28:39.427 に答える
0
  SELECT master_id, count(*) AS no_of_slave
    FROM slave
GROUP BY master_id
ORDER BY master_id;
于 2013-05-29T11:29:27.703 に答える
0

マスター名には関心がないため、結合は必要ありません。必要な情報はすべて Slave テーブルにあります。

select master_id, count(slave_id) as no_of_slave
from Slave
group by master_id
order by master_id --remove this line, if ordering of master ids is not important
;

特定のマスター ID がこの結果にない場合、これはスレーブがないことを意味します。

于 2013-05-29T11:38:22.697 に答える