0

我有两个mysql表。jobsreqtraining 和课程已完成。

jobsreqtraining 有两个栏目,工作和培训。

Coursescompleted 有两列,course 和 person。

截图如下:

职位要求培训

职位要求培训

完成的课程

完成的课程

我需要做的是,如果 Bryan Habana 从事起重机操作员的工作,他是否完成了“MHE 驾照”课程?

所以我的查询将有两个变量,Job 和 Person。所以如果我选择 Bryan Habana 和 Crane Operator 我想要的输出将是


培训                         完成课程?

起重机操作员编号


我相信我必须使用左外连接来实现这一点,但即使该人尚未完成培训,也要努力获得工作所需的课程?

select 
  n.course, 
  c.person
from (select 
  training as course 
  from jobsreqtraining where Job='crane operator'
) as n 
left outer join coursescompleted c 
  on n.course=c.course 
where c.person='bryan habana'

一如既往的帮助,谢谢,

4

3 回答 3

2
SELECT 
  n.person,
  j.job AS job,
  j.training AS Training,
  CASE WHEN c.person IS NULL THEN 'No' ELSE 'Yes' END AS `Completed Course?`
FROM jobsreqtraining j 
  CROSS JOIN (select distinct person from coursescompleted) n
  LEFT JOIN coursescompleted c
    ON j.training = c.course AND n.person = c.person
WHERE 
  n.person = 'Bryan Habana'
  AND j.job = 'Crane Operator'

sqlfiddle.com 上的现场演示

请注意,您可以更改WHERE子句以针对不同的人和/或不同的工作选择不同的信息集。甚至适用于多人和/或工作。

这是一个完全省略 where 子句的示例。它显示了所有人的所有工作,每个人都有一个是/否指示。

于 2012-11-06T07:47:52.007 回答
1

coursescompleted.coursejobsreqtraining.training连接在一起的吗?如果是,你可以使用这个:

SELECT jobsreqtraining.job as Training,
  IF(EXISTS(SELECT * FROM coursescompleted
            WHERE coursescompleted.person='bryan habana'
              AND jobsreqtraining.training = coursescompleted.course), "Yes", "No)
FROM jobsreqtraining
WHERE jobsreqtraining.job = 'crane operator'
于 2012-11-06T07:02:20.057 回答
1
select 'creane operator' `job`,
CASE WHEN (select count(*) from coursescompleted where person='bryan habana'
and course=(select training from jobsreqtraining where job='crane operator')) > 0 
then   'Yes'  else 'No' END `Completed Course`
于 2012-11-06T07:01:34.203 回答