0

これは動作します

SELECT DISTINCT  b.b_id 
FROM             b INNER JOIN c 
ON               b.b_id=c.b_id  
WHERE            c.active='yes' AND b.featured='no'

結果が0行を返す必要がある場合、これはcount=0のnull行を返します。

SELECT DISTINCT  b.b_id, COUNT(c.c_id) AS count
FROM             b INNER JOIN c 
ON               b.b_id=c.b_id  
WHERE            c.active='yes' AND b.featured='no'

私は何か間違ったことをしていますか?

4

3 に答える 3

3

特定のレコードに一致するレコードがない場合、欠落している行の代わりに 0 のカウントを返したいのでleft join、 an の代わりにa が必要だと思います。inner joincb

group byまた、などの集計関数を使用する場合は、 を含める必要がありますcount

SELECT
    b.b_id,
    COUNT(DISTINCT c.c_id) AS count
FROM 
    b 
    LEFT JOIN c 
        ON b.b_id=c.b_id  
        AND c.active='yes' 
WHERE b.featured='no'
GROUP BY b.b_id
于 2012-05-24T18:48:25.080 に答える
1

DISTINCT に入れてみてくださいCOUNT()

SELECT b.b_id, COUNT(DISTINCT c.c_id) AS count
FROM b
JOIN c ON b.b_id=c.b_id  
WHERE c.active='yes' 
AND b.featured='no'
GROUP BY 1

ところで、SQLをこのようにフォーマットすることを検討してください。これは私見の方が読みやすいです。

于 2012-05-24T18:49:23.630 に答える
0

DISTINCT の代わりに GROUP BY を試してみたいと思います。

    SELECT b.b_id, COUNT(c.c_id) AS count
    FROM 
    b INNER JOIN c 
    ON 
    b.b_id=c.b_id  
    WHERE 
    c.active='yes' 
    AND 
    b.featured='no'
    GROUP BY b.b_id
于 2012-05-24T18:58:54.383 に答える