You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于两个外键展示城市名称列的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:25:35