2つのテーブルのデータを1つの結果にマージしようとしていますが、でIDを複製せずCourseID
に、ユーザーの補完が結果で優先されます。
ユーザーコース修了表
Col Name | Default | PK?
===================================
UserID Y
CourseID Y
SystemComplete NULL N
UserComplete NULL N
UserID, CourseID, SystemComplete, UserComplete
1, 1, NULL, 12/06/2012
1, 2, NULL, 12/06/2012
1, 3, 10/06/2012, 12/06/2012
1, 4, NULL, NULL
1, 5, 10/06/2012, NULL
2, 1, NULL, 12/06/2012
グループテーブルへのコース
Col Name | Default | PK?
===================================
CourseID Y
GroupID Y
CourseID, GroupID
1, 1
2, 1
3, 1
4, 1
12, 1
5, 2
6, 2
推測される結果
ユーザーのすべてのコースの完了を検索し、そのリストを未完了のアイテムで補足したいと思います。たとえば、グループ1
とユーザーのリストが必要な場合は、次のようになり1
ます。
CourseID, SystemComplete, UserComplete
======================================
1, NULL, 12/06/2012
2, NULL, 12/06/2012
3, 10/06/2012, 12/06/2012
4, NULL, NULL
12, NULL, NULL --not in completion record
私が試したこと
私はいくつかのクエリを試しましたが、これを理解できないようです。以下のものは私がいくつかの 質問で見つけたものでした。
SELECT
COALESCE(uc.CourseID, cg.CourseID) as CourseID
FROM
CoursesToGroup as cg
FULL JOIN UserCompletion as uc ON
uc.CourseID = cg.CourseId
WHERE
uc.UserID = 1 AND
cg.GroupID = 1
...しかし、これは1行の結果のみを返します
私が得た最も近いものは2つのクエリを実行することですが、クエリにデータUNION
を取得する方法がわかりませんUserComplete
SystemComplete
SELECT CourseID
FROM UserCompletion
WHERE
EmployeeID = 1
UNION
SELECT CourseID
FROM CoursesToGroup
WHERE
LearningPathID = 1
これは適切な結果を返しますCourseID
が、前に述べたように、そこに完了データをドロップして重複を削除する方法がわかりませんCourseId
。
ここで何が欠けていますか?