SBNTT:
私は3つのテーブルを持っています:
A
Aへの外部キーを持っているB
同じC
どのように私はAの行を参照する関係の合計数を数えることができますか?
EX。
A
+----+------+
| id | name |
+----+------+
| 1 | foo |
| 2 | bar |
+----+------+
B
+----+----+
| id | a |
+----+----+
| 1 | 1 |
| 2 | 1 |
| 3 | 2 |
| 4 | 2 |
+----+----+
C
+----+----+
| id | a |
+----+----+
| 1 | 1 |
| 2 | 1 |
+----+----+
私はこの結果を取得したいです:
+------+----+
| name | a |
+------+----+
| foo | 4 |
| bar | 2 |
+------+----+
感謝
パトリックAllaert:
編集1:すべての子テーブルが空であることを考慮に入れて
編集2:受け入れられた答えは非効率的とになります一時テーブルで作成されているunion
の大きさのB
+ C
、その後、グループ化は、その上で実行されます一時テーブル。そのクエリの実行計画を明らかにしUsing temporary; Using filesort
、両方とも悪いです:
+------+-------------+------------+-------+---------------+------+---------+-----------------+------+---------------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+------+-------------+------------+-------+---------------+------+---------+-----------------+------+---------------------------------+
| 1 | PRIMARY | A | ALL | NULL | NULL | NULL | NULL | 5 | Using temporary; Using filesort |
| 1 | PRIMARY | <derived2> | ref | key0 | key0 | 5 | A.id | 2 | |
| 2 | DERIVED | B | index | NULL | a | 4 | NULL | 15 | Using index |
| 3 | UNION | C | index | NULL | a | 4 | NULL | 14 | Using index |
+------+-------------+------------+-------+---------------+------+---------+-----------------+------+---------------------------------+
あなたは、単に個人をまとめる場合は一方でCOUNT
、あなただけのインデックスは元素の量を知るために照会される必要があります:
SELECT name,
(SELECT COUNT(*) FROM B WHERE B.a = A.id) +
(SELECT COUNT(*) FROM C WHERE C.a = A.id) AS count
FROM A;
これは、計画を説明し、以下のような結果になります。
+------+--------------------+-------+------+---------------+------+---------+-----------------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+------+--------------------+-------+------+---------------+------+---------+-----------------+------+-------------+
| 1 | PRIMARY | A | ALL | NULL | NULL | NULL | NULL | 5 | |
| 3 | DEPENDENT SUBQUERY | C | ref | a | a | 4 | A.id | 1 | Using index |
| 2 | DEPENDENT SUBQUERY | B | ref | a | a | 4 | A.id | 1 | Using index |
+------+--------------------+-------+------+---------------+------+---------+-----------------+------+-------------+
クエリと受け入れ答え+で利用可能なこの1の計画を説明し、デモを。