MySQLでは複数の外部テーブルからの参照の合計金額を数えます

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の計画を説明し、デモを

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=9007&siteId=1