我有两个表供参与者使用,一个表适用于入围候选人。 参与者表包含测试所有申请人的列表,而入围表仅列入候选人名单。在第二个表中,一旦用户点击UI中的候选名单按钮就会插入数据(这部分是正确的)。当用户点击两次相同的按钮时,候选人将从候选名单中删除(我在入围表中有“状态”字段,并且标记值已移除在其中设置为取消候选人名单
现在,当我尝试使用以下查询拉出所有候选项时,我没有得到所需的输出。
我的要求是拉出所有未入围的候选人。
P.S如果学生未被选中一次,则该学生将不会在入围表中输入任何内容。如果学生被选中一次并被删除,则会在入围表格中输入详细信息,状态已删除
我目前的查询如下
SELECT DISTINCT(gca.leaderEmail)lemail,
gca.leaderId,
gca.leaderName,
gca.leaderMobile,
gca.clgName,
gca.t1Name,
gca.t2Name,
gca.id caseApplyId,
gca.caseId caseId,
gu.profile_pic,
CASE WHEN gcs.id IS NULL then FALSE else TRUE end as shortlist
FROM gmmu_case_apply gca
LEFT JOIN gmmu_users gu ON gu.id = gca.leaderId AND gca.leaderId <> 0
LEFT JOIN gmmu_case_shortlist gcs ON gcs.applicantId = gca.id
WHERE gca.caseId = $caseId
你能帮我弄清楚我在这里做错了什么来实现我想要的输出
更新 我的要求是我应该 FALSE 如果在第二个表中候选人的状态='已移除',并且 FALSE 以防无法匹配在第二个表中为该用户加入。我希望别名候选名单的返回为TRUE或FALSE我在上面的查询中与此行已达到一定距离
CASE WHEN gcs.id IS NULL then FALSE else TRUE end as shortlist
答案 0 :(得分:0)
我相信您需要将gmmu_case_shortlist上的联接更改为LEFT JOIN。编写的查询只返回gca和gcs中的记录。
此外,您的案例陈述需要修改以检查gcs.status是否已删除&#39;像:
CASE WHEN gcs.status='removed' THEN FALSE
WHEN gcs.id is null THEN FALSE
else TRUE
end as shortlist
答案 1 :(得分:0)
好的家伙终于解决了这个问题,感谢@MartinPicker的帮助,所以我的新查询是
SELECT DISTINCT(gca.leaderEmail)lemail,
gca.leaderId,
gca.leaderName,
gca.leaderMobile,
gca.clgName,
gca.t1Name,
gca.t2Name,
gca.id caseApplyId,
gca.caseId caseId,
gu.profile_pic,
CASE WHEN gcs.id IS NULL OR gcs.currentStatus = 'removed' then FALSE else TRUE end as shortlist
FROM gmmu_case_apply gca
LEFT JOIN gmmu_users gu ON gu.id = gca.leaderId AND gca.leaderId <> 0
LEFT JOIN gmmu_case_shortlist gcs ON gcs.applicantId = gca.id
WHERE gca.caseId = $caseId