必要なのは、training_id172とtraining_id174を指定すると、ユーザー150のみを返す必要があるということです。
これを試しましたが、機能しません
SELECT user_id FROM Training_users WHERE training_id = 172 AND training_id = 174
ほとんどの場合、training_idは2を超える可能性があります
必要なのは、training_id172とtraining_id174を指定すると、ユーザー150のみを返す必要があるということです。
これを試しましたが、機能しません
SELECT user_id FROM Training_users WHERE training_id = 172 AND training_id = 174
ほとんどの場合、training_idは2を超える可能性があります
このクエリはどうですか?
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 BY
とHAVING
こちら
編集:sqlfiddleでテストした後、これは機能しているようで、一部のユーザーが複数のtraining_idを持ち、そのうちの1つが172または174である場合、間違った値を返しません。
これは機能するはずです:
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;
これはそれを行う必要があります:
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
select user_id from work where training_id in (172,174) group by user_id having count(*) > 1;
SQLFiddleデモを確認してください
このようなことをする
SELECT user_id FROM Training_users WHERE (training_id = 172) AND (training_id = 174)