Mysql 左连接,右表中有更多字段
我有个问题! “我的店铺”表包含4行,每行包含店铺名称、ID和与该店铺相关的其他数据 我还有一个“绑定”表,在其中我可以选择哪些产品类别应该在哪些商店中可见。自然,绑定表将包含更多的行。。。我想从shops表中选择所有的shops,如果shop ID相同,则只连接右表bind表中的行Mysql 左连接,右表中有更多字段,mysql,Mysql,我有个问题! “我的店铺”表包含4行,每行包含店铺名称、ID和与该店铺相关的其他数据 我还有一个“绑定”表,在其中我可以选择哪些产品类别应该在哪些商店中可见。自然,绑定表将包含更多的行。。。我想从shops表中选择所有的shops,如果shop ID相同,则只连接右表bind表中的行 SELECT * , b.categoryId as bindCategory FROM shops LEFT JOIN bind_shop_category AS b ON shops.shopId = b.s
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
试试这个:
SELECT S.* , B.categoryId as bindCategory
FROM shops S
LEFT JOIN bind_shop_category B
ON B.shopId = S.shopId
嗯,你的意思可能是:
SELECT shops.*, b.categoryId as bindCategory
FROM shops
LEFT JOIN bind_shop_category AS b
ON shops.shopId = b.shopId
(或者,按照我写的方式:)
更新帖子之后。您需要以下内容
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
如果您只想在一行中列出每个店铺的所有类别,可以使用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
将左连接更改为内部连接,以仅显示至少有一个类别的店铺。上面的b和b引用是否冲突,或者不区分大小写?
1 shop1 NULL
2 shop2 category1,category2
3 shop3 category1