0

必要なのは、training_id172とtraining_id174を指定すると、ユーザー150のみを返す必要があるということです。

ここに画像の説明を入力してください

これを試しましたが、機能しません

SELECT user_id FROM Training_users WHERE training_id = 172 AND training_id = 174

ほとんどの場合、training_idは2を超える可能性があります

4

5 に答える 5

1

このクエリはどうですか?

SELECT user_id, COUNT(*) as nbTrainings FROM Training_users
WHERE training_id = 172 OR training_id = 174
GROUP BY user_id
HAVING nbTrainings = 2

トレーニング172または174を使用しているユーザーをフィルタリングします。次に、各ユーザーが返したトレーニングの数をカウントし、2つのトレーニングを含むトレーニングのみを保持します。

これは、ユーザーが複数のトレーニング172および/または174を受講できないことを前提としています。

複数の自己結合に対するこれの利点は、3つ以上のトレーニングIDでフィルタリングする場合に、トレーニングIDごとに複数回結合する必要がないことです。

詳細GROUP BYHAVING こちら

編集:sqlfiddleでテストした後、これは機能しているようで、一部のユーザーが複数のtraining_idを持ち、そのうちの1つが172または174である場合、間違った値を返しません。

作業中のsqlfiddle

于 2013-02-18T12:33:00.110 に答える
0

これは機能するはずです:

SELECT a.user_id FROM Training_users a, Training_users b WHERE a.training_id = 172 and a.user_id = b.user_id AND b.training_id = 174;
于 2013-02-18T12:31:00.030 に答える
0

これはそれを行う必要があります:

SELECT
  a.user_id
FROM
  Training_users a
RIGHT JOIN
  Training_users b ON a.user_id = b.user_id AND b.training_id = 174
WHERE
  a.training_id = 172
于 2013-02-18T12:48:46.313 に答える
0
select user_id from work where training_id in (172,174) group by user_id  having count(*)  > 1;

SQLFiddleデモを確認してください

于 2013-02-18T12:51:15.580 に答える
-3

このようなことをする

SELECT user_id FROM Training_users WHERE (training_id = 172) AND (training_id = 174)
于 2013-02-18T12:28:36.500 に答える