1

MySql ステートメントについて質問があります。記録とトレーニングの 2 つのテーブルがあります。Training テーブルにはすべてのコースのリストが含まれ、record テーブルにはユーザーが参加したコースのリストが含まれます。トレーニングテーブルは以下です

ここに画像の説明を入力

レコード テーブル形式:

ここに画像の説明を入力

各ユーザーの未受講コースの一覧を取得したい。例: 上記のテーブル構造から、ユーザー 277 は 130,167,128 & 2 に出席しています。したがって、ユーザー 277 の非出席コースは 3,4,5,7,8,9,147,11,12 です。

上記の結果を取得するためのSQLステートメントをどのように書くことができますか? 助けてください

4

3 に答える 3

-1

ユーザーのリストを取得し、それをトレーニング コースと交差結合してから、ユーザーが行ったトレーニング コースのテーブルに LEFT OUTER JOIN します。WHERE 句を使用して、最後のテーブルに一致するものがなかったことを確認します。

テストされていませんが、次のようなものです:-

SELECT sub_user.UserId, t.id
FROM 
(
    SELECT DISTINCT UserId from record
) sub_user
CROSS JOIN Training t
LEFT OUTER JOIN Record r
ON sub_user.UserId = r.UserId
AND r.trainingId = t.id
WHERE r.id IS NULL

ユーザーのテーブルがある場合 (おそらくそうです)、サブクエリを削除して、そのテーブルに置き換えることができます。

于 2016-03-07T10:00:45.660 に答える
-1
select id from training where id not in ( select trainingid from record where userid = yourid)
于 2016-03-07T09:58:40.177 に答える