2012-03-04 1 views
0

私は短いクイズでユーザーに提供するイントラネットWebアプリケーションを開発しています。 質問です:私は、次のデータベースの設計を持っている:各部門の非参加者を表示するにはどうすればいいですか?

EMPLOYEE表:ユーザー名、名前、職業、DivisionID

分割テーブル:DivisionID、DivisionName

クイズ表:QuizID、タイトル、説明

UserQuiz表:UserQuizID、スコア、DateTimeComplete、QuizID、ユーザー名

注:各テーブル内の最初の属性をt彼は主キーです。だから、非参加者の

  • 非参加者の部門
  • 総数

:私は示してクエリを考え出す必要がある

どうやってするか?

答えて

2

このクエリは、あなたにクイズに参加していないユーザーのリストを与える:で質問に答えるために

SELECT COUNT(*) FROM Employee 
WHERE Username NOT IN (SELECT Username FROM UserQuiz) 

UPDATES:

SELECT Name, DivisionName FROM Employee AS E 
LEFT OUTER JOIN Division AS D ON E.DivisionID = D.DivisionID 
WHERE Username NOT IN (SELECT Username FROM UserQuiz) 

これは、あなた以外の参加者の数を与えますコメント:

クイズと除算ごとに非パラチパンをグループ化してカウントする:

SELECT Q.QuizId, D.DivisionName, E.Name FROM Quiz AS Q 
CROSS JOIN Employee AS E 
LEFT OUTER JOIN Division AS D ON E.DivisionID = D.DivisionID 
WHERE NOT EXISTS (SELECT * FROM UserQuiz AS UQ 
    WHERE UQ.Username = E.Username AND UQ.QuizID = Q.QuizID) 
ORDER BY Q.QuizId, D.DivisionName 
+0

ご協力いただきありがとうございます。本当にありがとうございます。そして、ところで、私はそれらの両方をマージし、上記のすべての要件を示す1つのクエリを持つことができますか? –

+0

nameとDivisionNameの後にCOUNT(*)を列として追加できます。しかし、それは返される各行で繰り返される同じ値を返すので、別のクエリを持つ方が良いと思います。また、データを受け取るコードで返される行の数を数えることができるので、それらを組み合わせる必要はありません。 –

+0

ありがとうございます。各クイズに参加者以外の名前を表示する方法。つまり、私はQuizIDを取得したいと思います。結果は、DivisionNameとQuizIDでグループ化する必要があります。どうやってするか? –

関連する問題