请求编写符合条件的多表关联SQL查询,关联DrugPackage等表获取指定字段
正确的多表关联SQL写法方案
首先,要实现多表关联查询,核心是找准表与表之间的关联主键/外键。根据你提供的原查询语句,我先基于医药系统表的常见关联逻辑做合理假设(如果你的实际关联字段不同,直接替换即可):
假设的表关联关系:
med.DrugPackage表通过baseDrug字段关联BaseDrug表的主键(比如id)med.DrugPackage表通过某个药物ID字段(比如drugId)关联Drug表的主键med.DrugPackage表通过某个商品名ID字段(比如tradNameId)关联TradName表的主键
基于原查询的多表关联SQL(保留原16条结果的前提下)
如果你希望原查询的16条记录都能被返回(哪怕关联的表中没有对应数据也保留),推荐用 LEFT JOIN;如果只需要关联成功的记录,用 INNER JOIN 即可。
SELECT dp.packText, dp.ifnPriceAup, bd.name AS base_drug_name, d.name AS drug_name, tn.name AS trad_name FROM med.DrugPackage dp LEFT JOIN BaseDrug bd ON dp.baseDrug = bd.id -- 替换为BaseDrug表实际的主键字段 LEFT JOIN Drug d ON dp.drugId = d.id -- 替换为DrugPackage中关联Drug的实际字段、Drug表主键 LEFT JOIN TradName tn ON dp.tradNameId = tn.id -- 同理替换为实际关联字段 WHERE dp.latest = '1' AND dp.available = '1' AND dp.baseDrug = '5102';
关键说明:
- 表别名的使用:给每个表起别名(比如
dp代表DrugPackage),能让SQL更简洁易读 - 关联条件的正确性:一定要替换上面注释里的关联字段为你的实际表结构字段——比如如果
DrugPackage和Drug是通过drugCode而不是id关联,就把dp.drugId = d.id改成dp.drugCode = d.drugCode - 字段重命名:用
AS给不同表的name字段起不同的别名,避免结果集中字段名重复混乱
如果你的表之间的关联逻辑不是上面假设的(比如BaseDrug和Drug先关联,再和DrugPackage关联),可以补充更详细的表结构信息,我再帮你调整!
内容的提问来源于stack exchange,提问作者uma
相关产品推荐
相关产品推荐

