现在已经困惑了一段时间。
基本上这是我的陈述。
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调整为FollowingID
后的新结果集
答案 0 :(得分:1)
SELECT *,
CASE
WHEN candidateId IN
(
SELECT followId
FROM following
)
THEN
'block'
ELSE
'none'
END AS divFollow
FROM Candidates
答案 1 :(得分: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上的值。
答案 2 :(得分: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
答案 3 :(得分:0)
您正在加入following ON following.RecID = Candidates.CandidateID
- 我想您想要的更像following ON following.followID = Candidates.CandidateID
。
此外,如果您不想使用divTagSal,可以使用GROUP BY
将它们放在一起。