Sql 从第一个左表中获取所有值,但当两个左联接使用时,会限制第一个表中的值
我试图从第一个左表中获取所有值,但当我使用两个左联接时,它会限制第一个表中的值 我使用了下面的查询Sql 从第一个左表中获取所有值,但当两个左联接使用时,会限制第一个表中的值,sql,sql-server,tsql,left-join,where-clause,Sql,Sql Server,Tsql,Left Join,Where Clause,我试图从第一个左表中获取所有值,但当我使用两个左联接时,它会限制第一个表中的值 我使用了下面的查询 SELECT P.person_id, TS.Task_Id, TS.skill FROM Person P LEFT JOIN Person_Skill PS ON P.person_id = PS.person_id LEFT JOIN Task_Skill TS ON PS.Skill = TS.Skill WHERE ts.task_id = 245 我需要person表中的所有
SELECT P.person_id, TS.Task_Id, TS.skill
FROM Person P
LEFT JOIN Person_Skill PS ON P.person_id = PS.person_id
LEFT JOIN Task_Skill TS ON PS.Skill = TS.Skill
WHERE ts.task_id = 245
我需要person表中的所有person id。只需将左侧联接表上的条件从联接的where子句移动到on子句:
select p.person_id, ts.task_id, ts.skill
from person p
left join person_skill ps
on p.person_id = ps.person_id
left join task_skill ts
on ps.skill = ts.skill
and ts.task_id = 245 --> here
理由:where条款中的条件是强制性的。如果ts中没有匹配项,则无法满足条件ts.task_id=245,因为ts.task_id为null。在子查询中使用筛选条件,而不是将其用作外部全局筛选。这会给你想要的输出
SELECT P.person_id,TS.Task_Id,TS.skill FROM Person P
LEFT JOIN Person_Skill PS
ON P.person_id=PS.person_id
LEFT JOIN
(Select * from Task_Skill where task_id = 245) TS
ON PS.Skill=TS.Skill;