将嵌套选择转换为连接

时间:2012-10-30 07:34:31

标签: mysql sql

我的查询是

select COUNT(*) from result 
where test_id in (select test_id 
                    from test_schedule 
                    where scheduler_id in (select user_id 
                                           from users 
                                           where user_type=1))

3 个答案:

答案 0 :(得分:1)

试试这个:

SELECT COUNT(r.*)
FROM result r
INNER JOIN test_schedule s ON r.test_id = s.test_id
INNER JOIN users u ON s.scheduler_id  = u.user_id
WHERE u.user_type = 1

答案 1 :(得分:0)

SELECT COUNT(r.*)
FROM result r
RIGHT JOIN test_schedule s USING(test_id)
RIGHT JOIN users u ON s.scheduler_id  = u.user_id
WHERE u.user_type = 1

答案 2 :(得分:0)

SELECT COUNT(*)
FROM result r
JOIN (SELECT DISTINCT test_id
      FROM test_schedule s
      JOIN users u ON s.scheduler_id = u.user_id
      WHERE u.user_type = 1) s
USING (test_id)

DISTINCT是必要的,以防止行与其他匹配的表中的所有行相乘。