0

テーブル コントラクト c (id, exp_date) とテーブル メンバー m (id, cid) があります。m.cid = c.id の 2 つのテーブルを結合して、すべてのコントラクトとすべてのメンバーを一緒にカウントする必要があります。

私はこれを試しましたが、両方のテーブルから同じカウント結果を返すため、明らかに正しくありません

SELECT count(m.id) as totmembers , count(c.id) as totcontracts
from members m
join contracts c on m.cid = c.id
where DATEDIFF(c.im_exp, CURDATE()) > 0

結果は 5000 契約、12.000 メンバーのようになるはずですが、totmembers と totcontracts の両方で 12.000 を取得しています。

4

2 に答える 2

1

これを試して:

SELECT count(m.id) as totmembers , count(distinct c.id) as totcontracts
from members m
join contracts c on m.cid = c.id
where DATEDIFF(c.im_exp, CURDATE()) > 0
于 2012-07-02T14:44:27.000 に答える
0

INNER JOIN ステートメントが作成されているためです。SELECT リストに 2 つの個別のクエリを含む新しいクエリを作成します。

SELECT (SELECT ... WHERE ...) AS totmembers, (SELECT ... WHERE ...) AS totcontracts
于 2012-07-02T14:30:51.657 に答える