我需要的是:当我提供training_id 172 AND training_id 174时,它必须仅返回用户150
我试过了,但它不起作用
SELECT user_id FROM Training_users WHERE training_id = 172 AND training_id = 174
大多数时候training_id可能超过2
答案 0 :(得分: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
这对多个自联接的优势在于,如果您想要使用超过2个训练ID进行过滤,则不必为每个训练ID多次加入。
有关GROUP BY
和HAVING
here
答案 1 :(得分: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;
答案 2 :(得分: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
答案 3 :(得分:0)
select user_id from work where training_id in (172,174) group by user_id having count(*) > 1;
答案 4 :(得分:-3)
做这样的事情
SELECT user_id FROM Training_users WHERE (training_id = 172) AND (training_id = 174)