0

productsbuyersおよびの3 つのテーブルがありratingsます。

購入者は i 製品を評価でき、これは評価の行として保存され (buyer_idproduct_id)、購入者は 1 つの製品 (購入者ごとに最大 1 つのお気に入りの製品) をお気に入りとしてマークできます ( のバイナリ フラグratings)。

私はすべてのバイヤーのレポートを持っており、レポートの各行にバイヤーのお気に入りの製品の名前を追加したいと考えています (彼が持っている場合)、私はこれを試しました:

SELECT b.*, p.name 
FROM buyers b, products p 
LEFT JOIN ratings r 
    ON r.buyer_id = b.id 
    and r.product_id = p.id 
    and r.isFav=1 

残念ながら、これはエラーをスローします (「on 句」の不明な列「b.id」)。だから私はそれについて間違った方向に進んでいると感じています。必要なことを達成するのに役立つものはありますか?

4

1 に答える 1

4

データが表示されない場合、大きな問題の 1 つは、JOIN構文が混在していることです。次のように書き直すことができます。

SELECT b.*, p.name 
FROM buyers b
LEFT JOIN ratings r 
    ON b.id = r.buyer_id
LEFT JOIN  products p 
    ON r.product_id = p.id 
WHERE r.isFav=1 
于 2012-09-19T15:40:19.840 に答える