Мне нужно: когда я даю training_id 172 И training_id 174, он должен вернуть только пользователя 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. Затем он будет подсчитывать, сколько тренировок каждый пользователь возвратил и удерживает только один (ы) с двумя тренировками.
Это предполагает, что пользователь не может иметь несколько тренингов 172 и / или 174
Преимущество этого против множественных самосоединений заключается в том, что вам не нужно объединяться несколько раз для каждого идентификатора обучения, если вы хотите фильтровать более двух идентификаторов обучения.
Дополнительная информация о GROUP BY
и HAVING
здесь
EDIT: после тестирования в sqlfiddle это, похоже, работает и не возвращает неправильные значения, если у некоторых пользователей есть несколько training_id, а у одного – 172 или 174
Рабочий sqlfiddle
Это должно работать:
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 Demo
Сделайте что-нибудь подобное
SELECT user_id FROM Training_users WHERE (training_id = 172) AND (training_id = 174)