이전 조인을 외부 조인 (= * 및 * =)으로 사용하여 쿼리를 업데이트하고 있습니다. 외부 조인에 포함시킬 테이블이 3 개 있습니다. 내가 뭘LEFT OUTER JOIN 3 테이블
SELECT s.SkillID ,
NULL AS Signature ,
NULL AS DPL ,
CASE WHEN ISNULL(ds.DPL, dg.DPL) IS NULL
THEN p.ScaleTo - p.ScaleFrom + 1
ELSE ISNULL(ds.DPL, dg.DPL)
END AS DefaultDPL
FROM tbJobs j ,
tbSkills s
INNER JOIN tbSkillGroups sg ON s.SkillGroupID = sg.SkillGroupID ,
tbPerfScales p ,
tbDPLs ds ,
tbDPLs dg
WHERE j.JobID = 866
AND (ds.LevelID=*j.LevelID
AND ds.IDType = 1
AND ds.GroupOrSkillID=*s.SkillID
)
AND (dg.LevelID=*j.LevelID
AND dg.IDType = 0
AND dg.GroupOrSkillID=*sg.SkillGroupID
)
AND ((s.PerfScaleID IS NOT NULL
AND p.PerfScaleID = s.PerfScaleID
)
OR (s.PerfScaleID IS NULL
AND p.PerfScaleID = sg.PerfScaleID
)
)
:
SELECT s.SkillID ,
NULL AS Signature ,
NULL AS DPL ,
CASE WHEN ISNULL(ds.DPL, dg.DPL) IS NULL
THEN p.ScaleTo - p.ScaleFrom + 1
ELSE ISNULL(ds.DPL, dg.DPL)
END AS DefaultDPL
FROM tbPerfScales p ,
tbSkills s
INNER JOIN tbSkillGroups sg ON s.SkillGroupID = sg.SkillGroupID ,
tbJobs j
LEFT OUTER JOIN tbDPLs ds ON j.LevelID = ds.LevelID
AND s.SkillID = ds.GroupOrSkillID
LEFT OUTER JOIN tbDPLs dg ON j.LevelID = dg.LevelID
AND sg.SkillGroupID = dg.GroupOrSkillID
WHERE j.JobID = 866
AND ds.IDType = 1
AND dg.IDType = 0
AND ((s.PerfScaleID IS NOT NULL
AND p.PerfScaleID = s.PerfScaleID
)
OR (s.PerfScaleID IS NULL
AND p.PerfScaleID = sg.PerfScaleID
)
)
I 오류지고있어 몇 가지 이유 :
원래 쿼리는
The multi-part identifier "s.SkillID" could not be bound.
을 그리고 난에 알고 이 부분 :
tbJobs j
LEFT OUTER JOIN tbDPLs ds ON j.LevelID = ds.LevelID
AND s.SkillID = ds.GroupOrSkillID
내가 잘못하고있는 것이 확실하지 않습니다.
도움 주셔서 감사합니다. 호세
암시 적 구문은 많은 경우 SQL Server 2000까지 거슬러 올라가서 잘못된 결과를 만들어 내었습니다. 따라서 수정하려는 모든 쿼리는 처음에는 잘못된 것일 수 있습니다. 그리고 암시 적 구문과 명시 적 구문을 혼합하여 나쁜 결과를 얻는다면 모든 조인을 올바른 결과로 변환해야합니다. – HLGEM
일부 경우에 해당 될 수 있습니다. 그 때문에 정확한 결과가 나오는지 테스트하기 위해 많은 테스트를 실행하고 있습니다. 팁 고마워. – JRGuay