0

我需要的是:当我给 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

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 的用户。然后它将计算每个用户返回的培训数量,并仅保留具有两次培训的用户。

这假设用户不能进行多次培训 172 和/或 174

相对于多个自加入的优点是,如果您想过滤超过 2 个训练 id,则不必为每个训练 id 多次加入。

更多信息GROUP BYHAVING 这里

编辑:在 sqlfiddle 中测试后,如果某些用户有多个 training_id 并且一个为 172 或 174,这似乎有效并且不会返回错误值

工作的 sqlfiddle

于 2013-02-18T12:33:00.110 回答
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 回答
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 回答
-3

做这样的事情

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