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

SQL语句编写求助:根据ID获取两列对应的城市名称

解决SQL中通过外键获取仓库/制造商城市名称的问题

嘿,Lucy!看起来你卡在通过外键关联获取仓库和制造商的城市名称这一步了,这在多表关联查询里是很常见的需求,咱们来一步步搞定它。

首先,核心思路是:你需要把制造商表、仓库表分别和存储城市信息的表做关联(如果城市信息是单独存在一张表的话),或者直接从制造商/仓库表中读取城市字段(如果城市信息存在这两个表里的话)。

情况1:城市信息存储在单独的Cities表中

假设你的数据库结构是这样的:

  • Stock表:通过ManID关联Manufacturer,通过WHID关联Warehouse
  • Manufacturer表:有外键ManCityID指向Cities表的主键cityID
  • Warehouse表:有外键WHCityID指向Cities表的主键cityID
  • Cities表:包含cityID(主键)和cityName(城市名称)字段

那你可以修改SQL,通过两次关联Cities表(用不同别名区分)来获取对应的城市名称:

SELECT 
    s.stkName AS "Stock Name",
    c_man.cityName AS "Manufacturer City",  -- 制造商对应的城市
    c_wh.cityName AS "Warehouse City"       -- 仓库对应的城市
FROM Stock s
-- 关联制造商表(你已有的关联逻辑)
INNER JOIN Manufacturer m ON s.ManID = m.ManID
-- 关联仓库表(你已有的关联逻辑)
INNER JOIN Warehouse w ON s.WHID = w.WHID
-- 关联制造商对应的城市表,用别名c_man区分
INNER JOIN Cities c_man ON m.ManCityID = c_man.cityID
-- 关联仓库对应的城市表,用别名c_wh区分
INNER JOIN Cities c_wh ON w.WHCityID = c_wh.cityID
-- 保留你原来的过滤条件
WHERE 
    -- 这里放你之前的AND过滤语句,比如:
    s.stkQty > 0

情况2:城市信息直接存在制造商/仓库表中

如果Manufacturer表本身就有ManCity字段(直接存储城市名称),Warehouse表有WHCity字段,那更简单,直接读取这些字段就行:

SELECT 
    s.stkName AS "Stock Name",
    m.ManCity AS "Manufacturer City",
    w.WHCity AS "Warehouse City"
FROM Stock s
INNER JOIN Manufacturer m ON s.ManID = m.ManID
INNER JOIN Warehouse w ON s.WHID = w.WHID
-- 保留你原来的过滤条件
WHERE 
    -- 你的原有AND条件
    ...

关键提示

  • 用表别名(比如s代表Stock,m代表Manufacturer)可以让SQL更简洁,也避免字段名冲突
  • 如果关联的表名、字段名和我假设的不一样,直接替换成你数据库里的实际名称就好啦

内容的提问来源于stack exchange,提问作者Lucy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:36:44