我有问题! 我的商店表包含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 :(得分:0)
试试这个:
SELECT S.* , B.categoryId as bindCategory
FROM shops S
LEFT JOIN bind_shop_category B
ON B.shopId = S.shopId
答案 1 :(得分: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)
答案 2 :(得分: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
答案 3 :(得分: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,仅显示至少有一个类别的商店。