2012-10-30 75 views
1

我的查詢是轉換嵌套查詢到加盟

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)) 

回答

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是必要的,以保持行被乘以在所有行其他表匹配。

+0

非常感謝。它的工作原理與我想要的完全相同。 – shashank

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 
+0

我已經這樣做了,但兩者都給出了不同的結果。請幫助... – shashank

+0

@shashank - 在某些情況下,這兩種語法可能會有所不同,例如,如果'scheduler_id'的'NULL'值或'test_id'的where子句不會返回任何值。 –

+0

如果在'test_schedule'或'users'中有多個匹配行,這將返回一個更大的結果,因爲它將單獨計算所有匹配項。 – Barmar

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 
+0

這與Mahmoud Gamal的回答基本相同,他說回答錯誤的結果。 – Barmar

+0

同樣的事情,我再次得到。 – shashank