2009-08-28 4 views
1

私は問題があります! 私のお店のテーブルには4つの行が含まれ、それぞれにはショップ名、ID、およびその店に関連するその他のデータが含まれています。右テーブルのフィールドが多いまま左に動く

また、私はどの製品カテゴリをどの店で見るべきかを選択する「バインド」テーブルを持っています。もちろん、バインドテーブルにはさらに多くの行が含まれています...私はショップテーブルからすべてのショップを選択し、ショップIDが同じであれば、右側のテーブル、バインドテーブルの行だけに参加したいと思います。

SELECT * , b.categoryId as bindCategory 
FROM shops 

LEFT JOIN bind_shop_category AS b 
ON shops.shopId = b.shopId 

私がそれを好きならば、すべてのバインドをショップと対応するバインドデータだけでなく、対応するショップデータで取得します。 :P

これは非常に混乱しています。私は100%の質問を策定したかどうかはわかりません。

オム...予想データ:

shopId   shopName   bind.categoryId 
    1    shop1 
    2    shop2   category1 
    3    shop3   category1 
    4    shop4 

答えて

0

これを試してみてください。

SELECT S.* , B.categoryId as bindCategory 
FROM shops S 
    LEFT JOIN bind_shop_category B 
     ON B.shopId = S.shopId 
+0

上記のbとbの参照は矛盾しているか、大文字と小文字は区別されませんか? – JYelton

+0

ほとんどのDBでは大文字と小文字は区別されませんが、修正するために編集されます –

0

うーん。おそらくあなたは、意味:

SELECT shops.*, b.categoryId as bindCategory 
FROM shops 
LEFT JOIN bind_shop_category AS b 
ON shops.shopId = b.shopId 

(または、私はそれを書くと思います:)

SELECT shops.*, b.categoryId as bindCategory 
FROM shops 
LEFT JOIN bind_shop_category AS b 
USING (shopId) 
0

をポストが更新された後の方法。あなたは次のことが欲しい。

SELECT s.ShopId, s.ShopName , b.categoryId as bindCategory 
FROM shops 
    LEFT OUTER JOIN bind_shop_category AS b 
     ON (shops.shopId = b.shopId) 
ORDER BY s.ShopId 
0

あなたは、単に、単一の行の各ショップのすべてのカテゴリの一覧を表示したい場合は、GROUP_CONCAT

SELECT s.shopId, s.shopName, GROUP_CONCAT(b.categoryId) 
FROM shops s 
LEFT JOIN bind_shop_category AS b ON (s.shopId = b.shopId) 
GROUP BY s.shopId 

を使用することができ、出力はこのような何か...

1    shop1   NULL 
2    shop2   category1,category2 
3    shop3   category1 
になります

LEFT JOINをINNER JOINに変更すると、少なくとも1つのカテゴリのお店が表示されます。

関連する問題