0

2つのmysqlテーブルがあります。jobsreqtrainingとコースが完了しました。

jobsreqtrainingには、jobとtrainingの2つの列があります。

完了したcoursesには、courseとpersonの2つの列があります。

以下のスナップショット:

jobsreqtraining

jobsreqtraining

コース完了

コース完了

私がする必要があるのは、ブライアン・ハバナがクレーンオペレーターの仕事をしている場合、彼は「MHE運転免許証」コースを修了したかどうかです。

したがって、私のクエリにはJobとPersonの2つの変数があります。したがって、ブライアンハバナとクレーンオペレーターを選択した場合、希望する出力は次のようになります。


トレーニング                         はコースを完了しましたか?

クレーンオペレーターいいえ


私はこれを達成するために左外側の結合を使用する必要があると信じていますが、その人がトレーニングを完了していなくても、仕事に必要なコースを表示するために戦っていますか?

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
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 に答える
1

coursescompleted.course一緒にjobsreqtraining.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 に答える