アプリケーションの SQL クエリを書くのに苦労しています。以下に、データベース内のいくつかのテーブルのスクリーンショットを示します。
アプリケーションの一部がどのように機能するかを説明させてください。それから、SQL クエリで発生している問題を説明できます。
ユーザーは自分のシステム ( dbo.Form
) でアプリケーション フォームを作成できます。申請書はいくつかのセクションで構成されており、そのセクションの 1 つが職歴 ( dbo.FormEmployment
) です。雇用記録には、雇用者名、開始日などの詳細だけでなく、グレード ID も含まれます。ユーザーは、1 つ以上の雇用レコードをテーブルに追加できますdbo.FormEmployment
。
システム管理者は、システムにシフト ( ) を追加し、dbo.Shift
グレードをシフトに割り当てることもできます。これらのグレードはdbo.ShiftGrade
表に記録されます。シフトには 1 つ以上のグレードを割り当てることができます。つまり、1、2、3、4、または 5 つのグレードを割り当てることができます。
システム管理者がシフトとシフトの等級を追加したら、SQL クエリを実行して、等級がシフトに割り当てられた等級と一致するユーザーのリストを返したいと思います (ユーザーが雇用レコードを追加するときに等級を追加することを思い出してください)。 )。
機能する次の SQL クエリを作成しましたが、このクエリの問題は、シフトに割り当てられたグレードと一致するグレードを持つユーザーのリストを返すことです。
SELECT u.userID, u.userTypeID, u.firstName, u.lastName, u.email, u.password,
u.contactNumber, u.organisationID, u.emailVerificationCode, u.mobileVerificationCode,
u.userStatusID, u.AddedBy, u.AddedDate, u.ModifiedBy, u.ModifiedDate
FROM [User] u
--Check Grades Match
WHERE u.userID IN
(
SELECT f.locumID
FROM dbo.Form f, dbo.FormEmployment emp
WHERE f.formID = emp.formID
AND emp.statusID = 101
AND emp.workYN = 1
AND emp.gradeID IN (
select gradeID from dbo.ShiftGrade where shiftID = @p0
)
)
これを行うために IN ステートメントを使用していることがわかります。ただし、シフトに割り当てられているのとまったく同じグレードに一致するユーザーのリストのみを返したいと考えています。したがって、シフトに 3 つのグレードが割り当てられている場合、まったく同じ 3 つのグレードを持つユーザーのリストが返されるようにします。
長い投稿で申し訳ありませんが、このように説明する方が良いと思いました。これに関するフィードバックやヘルプをいただければ幸いです。