1

やあみんな、あなたが私を助けてくれることを望んでいました.

3 つの異なるテーブルに外部キーを持つ 1 つのメイン テーブルがあるようなクエリを作成しようとしています。ここで、3 つのテーブルすべてのエントリを別々に数えたいと思います。これは私がこれまでに持っているものであり、皆さんがそれを修正するのを手伝ってくれることを願っています.

SELECT box_code.id, count( box_code_unused.id ) AS total, count( box_code_used.id ) AS total2, count( box_code_expired.id ) AS total3
FROM box_code
JOIN box_code_used ON box_code_used.box_code_id = box_code.id
JOIN box_code_unused ON box_code_unused.box_code_id = box_code.id
JOIN box_code_expired ON box_code_expired .box_code_id = box_code.id
GROUP BY box_code.id

このアプローチは、1 つのテーブルのみからエントリをカウントしている場合に機能しますが、3 つのテーブルからカウントしているため、正しくありません。

前もって感謝します。

4

3 に答える 3

1

IDの個別の出現をカウントする場合があります。

SELECT box_code.id, 
       count(distinct box_code_unused.id ) AS total, 
       count(distinct box_code_used.id ) AS total2, 
       count(distinct box_code_expired.id ) AS total3
FROM box_code
LEFT JOIN box_code_used ON box_code_used.box_code_id = box_code.id
LEFT JOIN box_code_unused ON box_code_unused.box_code_id = box_code.id
LEFT JOIN box_code_expired ON box_code_expired .box_code_id = box_code.id
GROUP BY box_code.id
于 2012-08-21T10:21:46.633 に答える
1

次のようなサブクエリを使用します。

SELECT box_code.id, 
    (SELECT COUNT(*) FROM box_code_used b1 WHERE b1.box_code_id = box_code.id) AS total1,
    (SELECT COUNT(*) FROM box_code_unused b2 WHERE b2.box_code_id = box_code.id) AS total2,
    (SELECT COUNT(*) FROM box_code_expired b3 WHERE b3.box_code_id = box_code.id) AS total3
FROM box_code
于 2012-08-21T10:22:47.460 に答える
0

右結合を使用できると思います。そうすれば、あるテーブルでは利用できないが別のテーブルでは利用できるレコードが含まれます。

于 2012-08-21T10:25:03.060 に答える