首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MYSQL -在添加空外键表时得不到结果

MYSQL -在添加空外键表时得不到结果
EN

Stack Overflow用户
提问于 2016-07-09 16:35:46
回答 1查看 17关注 0票数 0

所以我一直有这方面的问题。

我有一座建筑,上面写着一家商店在城市里。

代码语言:javascript
复制
table Stores
store (pk)
city (fk)

弄到它们很好。然后我添加store_info

代码语言:javascript
复制
table store_info
store (pk)
adress
phone
description

因此,我们得到了以下查询:

代码语言:javascript
复制
SELECT stores.ID, store_info.address, store_info.phone
                        FROM store_info, stores
                        WHERE stores.city = 1
                        AND stores.ID = store_info.storeID

现在,一切都很顺利。然而,我加入FROM store_brands的那一刻

代码语言:javascript
复制
    SELECT stores.ID, store_info.address, store_info.phone
                        FROM store_info, stores, store_brands, brands
                        WHERE stores.city = 1
                        AND stores.ID = store_info.storeID

最后一个查询无法给出结果,但查询没有失败。

问题是,我将商店与品牌分开存储,并通过一个关系表(2个外键)将品牌链接到商店,看起来就像这样:

代码语言:javascript
复制
store_brands
  storeID (fk to stores)
  brandID (fk to brands)

设置的全部要点(正如您可能知道的)是,我可以通过使用GROUP_CONCAT收集所有品牌。从技术上讲,只要商店在store_brands表中至少有一个关系,查询就能很好地工作。

现在,我想做的是,我想要得到的商店完全不管它是否有联系的品牌。这些相同的品牌也可以通过连锁链接(1层以上),所以我想收集这两个实例,这意味着我仍然希望商店出现,即使它没有任何品牌填写。

我不明白为什么store_brands中必须有一行才能显示简单的select查询。有人能帮我吗?我在结构上犯了大错吗?

为了清晰起见,编辑:顺便说一句,--这是整个查询。它运行良好,但同样,只有当商店实际上有品牌链接到它时才能工作:(之前的查询是关于它哪里出错的调试器)。

代码语言:javascript
复制
SELECT store_info.storeID, store_info.display_name, store_info.address, store_info.phone, GROUP_CONCAT(brands.display_name ORDER BY brands.name) AS brands
                    FROM store_info, brands, stores, store_brands
                    WHERE stores.city = 1
                    AND store_brands.store =  stores.ID
                    AND brands.id = store_brands.brand
                    AND stores.ID = store_info.storeID
                    GROUP BY store_info.storeID
                    ORDER BY store_info.display_name

更新和应答

感谢idg提供的源代码,我了解了如何用左联接替换常规联接,以及如何返回NULL。

新的工作查询:

代码语言:javascript
复制
SELECT stores.ID, store_info.display_name, store_info.address, store_info.phone, GROUP_CONCAT(brands.display_name ORDER BY brands.name) AS brands
                        FROM store_info, stores
                        LEFT JOIN store_brands ON stores.ID = store_brands.store
                        LEFT JOIN brands ON store_brands.brand = brands.ID
                        WHERE stores.city = 1
                        AND stores.ID = store_info.storeID
                        GROUP BY store_info.storeID
                        ORDER BY store_info.display_name
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-09 16:41:11

对于允许空值的情况,请使用LEFT JOIN。读一读如何在这里工作

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38283958

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档