1

次の MySQL テーブルがあります。B_ID は、Table_B の ID 列を指す外部キーです。

----------    -----------
|Table_A |    |Table_B  |
----------    -----------
|B_ID int|    |ID int   |
----------    |VALUE int|
              -----------

Table_A に外部キーとして表示される ID のみを考慮して、Table_B の VALUE 列の合計を計算したいと考えています。また、Table_B の各行を最大 1 回追加したいと考えています。

したがって、テーブルに次のデータが入力されているとします。

------    ------------
|B_ID|    |ID | VALUE|
------    ------------
|1   |    |1  | 50   |
|2   |    |2  | 100  |
|2   |    |3  | 200  |
------    ------------

合計は 150 になります (50 + 100 として計算されます)。

私が現在使用しているクエリは次のとおりです。

SELECT SUM(b.VALUE)
FROM Table_B b
WHERE b.id IN (SELECT DISTINCT B_ID FROM Table_A)

ただし、可能であればサブクエリは避けたいと思います。サブクエリなしでこれを行う方法についてのアイデアはありますか?

注: このクエリ自体は、より大きなクエリのサブクエリであるため、選択できる列は 1 つだけです。

4

1 に答える 1

1

これはサブクエリをなくすわけではありませんが、 のレコード数が少なく、 のレコード数が多い場合は、より効率的にaなりますb

SELECT  SUM(value)
FROM    (
        SELECT  DISTINCT b_id
        FROM    a
        ) a
JOIN    b
ON      b.id = a.b_id

これが高速に動作するようにインデックスを作成しますa.b_id

のレコード数が少なく、 のレコード数が多い場合ba元のクエリの方が高速です。インデックスの提案は引き続き適用されます。

于 2012-06-06T12:15:06.427 に答える