我有两张表,一张用于参与者,另一张用于入围候选人。参与者表中有参加测试的所有申请人的列表,而shortlist 表中只有入围的候选人。在第二个表中,一旦用户单击UI中的短列表按钮,就会插入数据(这部分是正确的)。当用户点击相同的按钮两次,候选人被从候选名单中删除(我在shortlisted表中有一个字段"status",并在其中设置了一个标志值removed以取消候选人的候选名单)
现在,当我尝试使用以下查询拉出所有候选时,我没有得到所需的输出。
我的要求是拉出所有未入围的候选人。
p。如果一个学生没有被选中一次,那么在shortlist 表中不会有该学生的任何条目。如果一个学生被选中一次,然后被删除,那么在shortlist 表中将有一个详细信息的条目,状态已删除
我当前的查询如下
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,如果在第二个表中没有匹配的JOIN为该用户。我希望别名短列表的返回值为TRUE或FALSE。我已经在上面的查询
中与这行达到了一定距离。CASE WHEN gcs.id IS NULL then FALSE else TRUE end as shortlist
我认为您需要更改您的连接在gmmu_case_shortlist为LEFT join以及。您编写的查询只会返回gca和gcs中的记录。
同样,需要修改case语句以检查gcs。"已删除"的状态:
CASE WHEN gcs.status='removed' THEN FALSE
WHEN gcs.id is null THEN FALSE
else TRUE
end as shortlist
Ok伙计们终于解决了,感谢@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