基于两个外键展示城市名称列的SQL实现问题
解决双城市关联的SQL查询问题
没问题,我一眼就发现你查询里的问题啦——你现在只关联了一次CITY7364表,而且仓库的关联条件写得不对,导致Manufacturer City和Warehouse City显示的都是制造商所在的城市。要分别展示两个不同的城市,你需要两次关联CITY7364表,给它们取不同的别名来区分。
修正后的SQL代码
SELECT s.StkName, c1.CityName AS "Manufacturer City", c2.CityName AS "Warehouse City", s.SellingPrice FROM STOCKITEM7364 s LEFT OUTER JOIN MANUFACTURER7364 m ON m.ManID = s.ManID LEFT OUTER JOIN CITY7364 c1 ON c1.CityID = m.CityID -- 关联制造商所属城市 LEFT OUTER JOIN WAREHOUSE7364 w ON w.WHID = s.WHID LEFT OUTER JOIN CITY7364 c2 ON c2.CityID = w.CityID -- 关联仓库所属城市 WHERE s.StkName LIKE '%n' OR s.StkName LIKE '%e' OR s.StkName LIKE '%o' OR s.StkName LIKE '%p' OR s.StkName LIKE '%s';
关键修改点解释
- 给
CITY7364表取了两个不同的别名c1和c2,这样就能分别关联制造商和仓库的CityID,获取各自独立的城市名称。 - 移除了你原来写的
w.CityID = c.CityID错误条件,这个条件会强制要求仓库和制造商在同一个城市,完全不符合你要展示两个不同城市的需求。 - 如果你想简化WHERE条件,还可以用正则表达式替代多个OR(不同数据库语法略有差异):
-- MySQL示例 WHERE s.StkName REGEXP '[neops]$' -- SQL Server示例 WHERE s.StkName LIKE '%[neops]'
这样修改后,查询结果就能正确显示两个独立的城市列啦!
内容的提问来源于stack exchange,提问作者Daine MacTavish
相关产品推荐
相关产品推荐

