SQL如何基于列值关联Table1的ID与Table2的DepartmentID、LaboratoryID
关联方案
你原来的写法逻辑存在关联关系错误,没有正确建立Table1和Table2的匹配映射,推荐使用两次关联Table1的方案实现需求:
方案1:双表关联(可同时取到部门、实验室对应的Portfolio信息)
SELECT t2.DepartmentID, t2.LaboratoryID, dept.Portfolio AS DepartmentName, lab.Portfolio AS LaboratoryName FROM Table2 t2 -- 关联部门维度的Table1记录 INNER JOIN Table1 dept ON dept.ID = t2.DepartmentID AND dept.Portfolio = 'Department' -- 关联实验室维度的Table1记录 INNER JOIN Table1 lab ON lab.ID = t2.LaboratoryID AND lab.Portfolio = 'Laboratory'
方案2:EXISTS过滤(仅需要筛选匹配的Table2记录时使用)
如果你不需要查询Table1的字段,仅需要过滤出符合关联条件的Table2数据,可以使用EXISTS写法,性能更优:
SELECT * FROM Table2 t2 WHERE EXISTS ( SELECT 1 FROM Table1 WHERE ID = t2.DepartmentID AND Portfolio = 'Department' ) AND EXISTS ( SELECT 1 FROM Table1 WHERE ID = t2.LaboratoryID AND Portfolio = 'Laboratory' )
原写法失效原因
你在ON子句中使用了两个独立的子查询,相当于写死了固定ID值和Table2匹配,没有建立Table1和Table2的动态关联关系,当Table1的ID数据更新时逻辑会直接失效,同时关联逻辑缺失也容易触发笛卡尔积问题。
内容的提问来源于stack exchange,提问作者Learner
相关产品推荐
相关产品推荐

