如何创建正确关联同一表两个外键的SQL视图?
正确创建关联studio和publisher外键的v_releases视图
错误原因分析
- 第一次SQL用
AND同时绑定releases.studio_id = companies.id和releases.publisher_id = companies.id,这只有当开发商和发行商是同一家公司时才会匹配到数据,所以大部分场景下studio和publisher都是null。 - 第二次SQL只通过
studio_id关联了一次companies表,publisher字段复用了这个关联表的name值,导致和studio内容完全重复。
正确的视图创建SQL
你需要两次关联companies表,分别给表设置别名来区分开发商(studio)和发行商(publisher)的关联逻辑:
CREATE VIEW v_releases AS SELECT releases.id AS id, games.name AS name, studio_comp.name AS studio, publisher_comp.name AS publisher FROM releases LEFT JOIN games ON releases.game_id = games.id LEFT JOIN companies AS studio_comp ON releases.studio_id = studio_comp.id LEFT JOIN companies AS publisher_comp ON releases.publisher_id = publisher_comp.id;
这里用studio_comp和publisher_comp两个别名分别关联companies表,分别对应studio_id和publisher_id,就能正确获取各自的公司名称了。
内容的提问来源于stack exchange,提问作者Rome
相关产品推荐
相关产品推荐

