我需要的是:当我给 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
我需要的是:当我给 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
这个查询怎么样:
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
相对于多个自加入的优点是,如果您想过滤超过 2 个训练 id,则不必为每个训练 id 多次加入。
更多信息GROUP BY
和HAVING
这里
编辑:在 sqlfiddle 中测试后,如果某些用户有多个 training_id 并且一个为 172 或 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;
这应该有效:
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 user_id FROM Training_users WHERE (training_id = 172) AND (training_id = 174)