Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL-我的加入有问题吗_Mysql_Sql - Fatal编程技术网

MySQL-我的加入有问题吗

MySQL-我的加入有问题吗,mysql,sql,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

我对这件事困惑了一段时间

基本上这是我的声明

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
选择CandidateID、Town、Candidates.SalaryMin、CandidateExperience、CandidateExperience.divTagExp、PrimarySector、Candidates.SalaryMin、CandidateSalary.divTagSal、,
以下情况下的情况。RecID=1
然后“阻止”
“没有”
结束如下
来自候选人
LEFT JOIN CandidateExperience ON CandidateExperience.CandidateExpID=Candidates.CandidateExperience
LEFT JOIN CandidateSalary ON Candidates.SalaryMin>=CandidateSalary.SalaryMin
following.RecID=Candidates.CandidateID上的左连接following
SalaryMin我发现两个问题:

以下联接条件:

LEFT JOIN following ON following.RecID = Candidates.CandidateID
应该是:

LEFT JOIN following ON following.FollowID= Candidates.CandidateID
此外:


和Candidates.SalaryMin=CandidateSalary.SalaryMin和Candidates.SalaryMin您加入的是
following ON following.RecID=Candidates.CandidateID
-我想您想要的是更像
following ON following.followID=Candidates.CandidateID

此外,如果不需要divTagSal,可以使用
groupby
将它们放在一起

SELECT  *,
        CASE
        WHEN    candidateId IN
                (
                SELECT  followId
                FROM    following
                )
                THEN
                'block'
        ELSE
                'none'
        END AS divFollow
FROM    Candidates
可以进行进一步的内部联接以从下表中获取数据


左外部联接确保前一个表中的所有条目(联接运算符的左侧)至少在结果表中一个。如果后一个表(联接运算符的右侧)中没有对应项,则来自后一个表的单元格将填充NULL。这为您完成了任务,因为您希望每个候选人在follow中都有一个对应项,以便在divFollow上获得一个“block”,否则为“none”值。

啊,是的,这是一个问题。修正了此问题,但仍将获得多条记录,将上载新结果。和Candidates.SalaryMin如果希望每个候选人都有一行,则需要排除薪资,或将其聚合。。你有倍数,因为Bill Bridge在工资表中有多个条目。很遗憾,我需要divTagSal。如果你能发布一些来自CandidateExperience和CandidateSalary的记录,那将很有帮助。据我所知,这就是造成问题的原因(候选名单)。不用那个连接就试试吧。那些连接很好。就在添加以下连接时,它开始发送多个结果。对不起,我应该说得更清楚些,这已经做到了。我尽量避免使用子查询,但目前我想不出其他解决方法。谢谢。@Mcam435:有一种方法可以使用
左连接/is NULL
,但子查询并没有什么不好的地方
LEFT JOIN CandidateSalary ON Candidates.SalaryMin >= CandidateSalary.SalaryMin AND Candidates.SalaryMin <= CandidateSalary.SalaryMax
SELECT  *,
        CASE
        WHEN    candidateId IN
                (
                SELECT  followId
                FROM    following
                )
                THEN
                'block'
        ELSE
                'none'
        END AS divFollow
FROM    Candidates
select Candidates.*, ISNULL(Following.divFollow, 'none') as divFollow
from Candidates left join (select distinct followID from Following) as Following
    on CandidateID = followID