SQL语句编写求助:根据ID获取两列对应的城市名称
解决SQL中通过外键获取仓库/制造商城市名称的问题
嘿,Lucy!看起来你卡在通过外键关联获取仓库和制造商的城市名称这一步了,这在多表关联查询里是很常见的需求,咱们来一步步搞定它。
首先,核心思路是:你需要把制造商表、仓库表分别和存储城市信息的表做关联(如果城市信息是单独存在一张表的话),或者直接从制造商/仓库表中读取城市字段(如果城市信息存在这两个表里的话)。
情况1:城市信息存储在单独的Cities表中
假设你的数据库结构是这样的:
Stock表:通过ManID关联Manufacturer,通过WHID关联WarehouseManufacturer表:有外键ManCityID指向Cities表的主键cityIDWarehouse表:有外键WHCityID指向Cities表的主键cityIDCities表:包含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
相关产品推荐
相关产品推荐

