0

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を取得する方法がわかりませんUserCompleteSystemComplete

SELECT CourseID
FROM UserCompletion
WHERE
  EmployeeID = 1

UNION

SELECT CourseID
FROM CoursesToGroup
WHERE
  LearningPathID = 1

これは適切な結果を返しますCourseIDが、前に述べたように、そこに完了データをドロップして重複を削除する方法がわかりませんCourseId

ここで何が欠けていますか?

4

1 に答える 1

2
SELECT CourseID, SystemComplete, UserComplete
FROM UserCompletion
WHERE
UserId = 1

UNION

SELECT CourseId, null, null
FROM CoursesToGroup
where GroupId = 1
and CourseId NOT IN 
    (SELECT CourseId From UserCompletion
     WHERE UserId = 1)
于 2012-06-27T20:28:04.313 に答える