//アップデート:提供された回答はうまくいったが、別の状況に遭遇した。学生が別のポジションに移動した場合、重複があった場合に前のポジションの完了からクレジットを保持する必要があります。以下の状況を参照してください。MySQL Show Required Class Completed
2つのトレーニングコードのそれぞれに必要な2つのコース、courseAとcourseBがあります。生徒がコースAとコースBを訓練コード10で受け取り、新しい位置(訓練コード30)に移動すると、コードが変更されたためにCourseAとCourseBが完了していないという例外が表示されます。コースは同じですが。私は説明の数を比較しようとしましたが、うまくいきません。コース名は、トレーニングテーブル上のactivityIdと上の必須トレーニングテーブルです。何かご意見は?ありがとう
私は、学生が必要なトレーニング(カリキュラム)のリストからすべてのクラスを修了したか、完了していないかを判断するMySqlスクリプトを作成しようとしています。 以下の例では、John Doeがtraininglevel 0のクラス1,2、および3を完了したことを示す必要があります。また、クラス2が存在しないため、 が完了していないことを示す必要があります。クラスに受注番号を割り当てようとしました。受注番号3(Class3)に達すると が完成しましたが、受講者がクラス2を受講しなかった場合は、ギャップがありません。レベル0の訓練を受けているかどうかを表示してください。
tbltraining
firstname
lastname
email
organization
activity
description
status
jobcode
例tbltraining
John | Doe | [email protected] | 1233 | Class1 | Certification | Completed | 030
John | Doe | [email protected] | 1233 | Class2 | Certification | Completed | 030
John | Doe | [email protected] | 1233 | Class3 | Certification | Completed | 030
John | Doe | [email protected] | 1233 | OtherClass | Certification | Completed | 030
John | Doe | [email protected] | 1233 | OtherClass2 | Certification | Completed | 030
Jane | Doe | [email protected] | 3311 | Class1 | Certification | Completed | 010
Jane | Doe | [email protected] | 3311 | Class3 | Certification | Completed | 010
James | Doe | [email protected] | 1233 | Class1 | Certification | Completed | 030
James | Doe | [email protected] | 1233 | Class2 | Certification | Incomplete | 030
tblreqtraining
trainingname
trainingdescription
trainingcode
traininglevel
例
Class1 | Certification | 30 | 0
Class2 | Certification | 30 | 0
Class3 | Certification | 30 | 0
Class1 | Certification | 10 | 0
Class2 | Certification | 10 | 0
Class3 | Certification | 10 | 0
Class4 | Certification | 10 | 0
をtblreqtrainingの
Activity
ニーズが一致するtrainingdescription
jobcode
ニーズに合わせて、trainingname
Description
ニーズに合わせてtrainingcode
問合せ:この上
SELECT tra.firstname, tra.lastname, tra.email, tra.organization, tra.activity, tra.description,
tra.jobcode, req.trainingname, req.traininglevel, req.trainingcode
FROM tbltraining tra
RIGHT JOIN tblreqtraining req on tra.activity = req.trainingname and right(tra.jobcode, 2) = req.trainingcode
WHERE (right(tra.jobcode,2) = '30' or right(tra.jobcode,2) = '10')
and tra.description = 'Certification'
and tra.status = 'Completed'
and req.traininglevel = 0
任意の考えや方向をいただければ幸いです。
結果がどのように見えるかは不明です。 –
私はレベル0のカリキュラムを修了していないすべての生徒のリストを表示するためにクエリを実行することができます。名前、電子メール、ジョブコード、組織。または、レベル0のカリキュラムを完了した同じ列のリスト。 – Jason
'RIGHT JOIN'を使うときは、WHERE句の左のテーブルに条件を設定すべきではありません。それらは' ON'節にあるべきです。さもなければ、一致しない行からすべての 'NULL'値をフィルタリングします。これは' INNER JOIN'のようです。 – Barmar