2012-05-01 17 views
1

に私はこのMySQLのクエリが部分的に作業があります。COUNT()、GROUP BYとNULL値は、MySQLクエリ

SELECT p.product_id, p.product_name, p.sales, 
    p.length, p.hits, COUNT(w.product_id) AS favorites 
    FROM `products` AS p, `products_mf_xref` AS m, 
    `wishlist_items` AS w 
WHERE m.manufacturer_id = '1' 
    AND p.product_id = m.product_id 
    AND m.product_id = w.product_id 
GROUP BY m.product_id ORDER BY p.product_id ASC 

私はテーブルからいくつかのフィールドを回収した回数にこれらの製品を取得しようとしています別のテーブルで参照されています(この最後のテーブルは "whishlist"と呼ばれていました)。クエリは正常に動作していますが、ウィッシュリストテーブルで少なくとも1回参照されている製品のみを取得します。

私はcount(*)が意味をなさない値を得ていないことを読んでいますが、希望リストテーブルで参照されていない製品も必要です。つまり、COUNT(w.product_id)が等しい商品"0"。

null値も含めて、すべての製品を復元する方法はありますか? 質問を変更するにはどうすればよいですか?それは私を怒らせるだろう!

ありがとうございます!

答えて

1

使用LEFT JOINは:

SELECT p.product_id, p.product_name, p.sales, 
    p.length, p.hits, COUNT(w.product_id) AS favorites 
    FROM `products` AS p 
    LEFT JOIN `products_mf_xref` AS m 
     ON p.product_id = m.product_id AND m.manufacturer_id = '1' 
    LEFT JOIN `wishlist_items` AS w ON m.product_id = w.product_id 
GROUP BY m.product_id ORDER BY p.product_id ASC 

ところで、可能使用などの多くがデータの関係を反映するために、JOINとして、私は私の問題は、LEFTに何かJOINを持っていたことが疑わWHEREフィルタ

+0

のための使用しますMySqlの私のメモを見て正しい答えを探すことを考えたが、私は前に私に答えてくれた。私はあなたが正しいと言ってくれてうれしく、クエリは期待した結果を生む。ありがとうございました!あなたは亀裂です!しかし、私は次回に尋ねる前にメモを確認します。あなたのアドバイスをもう一度おねがいします! – Alberto

+0

よろしくお願いします。 :-) PostgreSQLをいつか使ってみてください。オープンソースのOracleのようなものです。例えば、CTEとウィンドウ関数を使って実現できるものを見てみましょう:http://stackoverflow.com/a/10395130 –

+0

これは、クエリを詳しく見てから、LEFT JOINについてのマスタークラスです。私は、MySQLに関する私のメモを見直すよりも、クエリを研究することによって多くのことを学びました。もう一度ありがとう! – Alberto