我正在更新使用舊外部連接的舊建築的查詢(= *和* =)。我有3個表,我需要包括在一個外部聯接。左外部連接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
)
)
出於某種原因,我得到的錯誤:
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
我不知道我在做什麼錯。
感謝任何幫助。 何塞
Yopu可能會發現wehn你這樣做是因爲外部的連接,您已經diffeernt結果比過去隱式語法在許多情況下都會產生不正確的結果,即使早於SQL Server 2000也是如此。因此,您正在修復的每個查詢都可能不正確。你可能會得到壞結果混合implict和顯式語法,你必須轉換所有連接以獲得正確的結果。 – HLGEM
這對某些情況可能是正確的,這就是爲什麼我要對它們進行大量測試以確保它們產生準確的結果。謝謝你的提示。 – JRGuay