MySQL - 我的加入有问题

时间:2013-09-19 16:09:51

标签: mysql sql

现在已经困惑了一段时间。

基本上这是我的陈述。

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

这是我的候选人表:

enter image description here

以下是我的下表:

enter image description here

以下是我的查询结果:

enter image description here

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

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

我错过了什么?

谢谢!

更新:

将RecID调整为FollowingID

后的新结果集

enter image description here

4 个答案:

答案 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将它们放在一起。