0

一直在纠结这个问题。

基本上这是我的声明。

SELECT CandidateID, Town, Candidates.SalaryMin, CandidateExperience, CandidateExperience.divTagExp, PrimarySector, Candidates.SalaryMin, CandidateSalary.divTagSal, 
CASE WHEN following.RecID =1
THEN  'block'
ELSE  'none'
END AS divFollow
FROM Candidates
LEFT JOIN CandidateExperience ON CandidateExperience.CandidateExpID = Candidates.CandidateExperience
LEFT JOIN CandidateSalary ON Candidates.SalaryMin >= CandidateSalary.SalaryMin
LEFT JOIN following ON following.RecID = Candidates.CandidateID
AND Candidates.SalaryMin <= CandidateSalary.SalaryMax

这是我的候选人表:

在此处输入图像描述

这是我的下表:

在此处输入图像描述

这是我的查询结果:

在此处输入图像描述

我知道连接有问题,但我试过左、右、内、外,但没有一个能给我我想要的。

我想要的是,候选人中的每个条目都有一个条目,如果“关注”中有匹配的条目,则 divFollow 字段显示“阻止”,如果没有,则显示“无”。

我错过了什么?

谢谢!

更新:

将 RecID 调整为 FollowID 后的新结果集

在此处输入图像描述

4

4 回答 4

1
select Candidates.*, ISNULL(Following.divFollow, 'none') as divFollow
from Candidates left join (select distinct followID from Following) as Following
    on CandidateID = followID

可以进行进一步的内部连接以从下表中获取数据。

左外连接确保前一个表中的所有条目(连接运算符的左侧)将在结果表中至少有一个。如果后面(连接运算符的右侧)表中没有对应者,则来自后面表的单元格将填充为 NULL。这可以为您完成工作,因为您希望每个候选人在关注中都有一个通讯员在 divFollow 上获得“块”,否则为“无”值。

于 2013-09-19T16:24:43.500 回答
1
SELECT  *,
        CASE
        WHEN    candidateId IN
                (
                SELECT  followId
                FROM    following
                )
                THEN
                'block'
        ELSE
                'none'
        END AS divFollow
FROM    Candidates
于 2013-09-19T16:19:15.007 回答
0

我看到两个问题:

以下加入条件:

LEFT JOIN following ON following.RecID = Candidates.CandidateID

应该:

LEFT JOIN following ON following.FollowID= Candidates.CandidateID

还:

AND Candidates.SalaryMin <= CandidateSalary.SalaryMax

应该在这里:

LEFT JOIN CandidateSalary ON Candidates.SalaryMin >= CandidateSalary.SalaryMin AND Candidates.SalaryMin <= CandidateSalary.SalaryMax
于 2013-09-19T16:15:22.120 回答
0

你加入了following ON following.RecID = Candidates.CandidateID——我猜你想要更像following ON following.followID = Candidates.CandidateID.

此外,如果您不想要 divTagSal,您可以使用GROUP BY将它们放在一起。

于 2013-09-19T16:15:37.867 回答