2013-03-15 85 views
3
SELECT requestID 
FROM request 
WHERE userId = (
    SELECT userID 
    FROM department 
    WHERE desig = 'E' 
    AND dept = (
     SELECT dept 
     FROM department 
     WHERE userId = it18 
     AND desig = 'FM' 
    ) 
); 
+3

请我们是人,我们想要的细节。 – fedorqui 2013-03-15 19:29:36

+0

显然你的一个子查询返回多个结果。如果我们知道你的桌子是什么样的,那么也许我们可以提供帮助。另外,你有没有想过使用'JOIN'呢? – 2013-03-15 19:33:55

回答

11

这将是更加清晰编写使用JOIN此查询:

select distinct r.requestID 
from 
    request r 
    join department d 
     on d.userId = r.userID 
     and desig = 'E' 
    join department d2 
     on d2.dept = d.dept 
     and d2.desig = 'FM' 
     and d2.userId = 'it18' 

或者,你可以简单地更换=IN

SELECT requestID 
FROM request 
WHERE userId IN (
    SELECT userID 
    FROM department 
    WHERE desig = 'E' 
    AND dept IN (
     SELECT dept 
     FROM department 
     WHERE userId = it18 
     AND desig = 'FM' 
    ) 
); 

他们应该返回相同的结果,但尝试以查看性能是否有差异。

5

有对付它的方法有两种:

选项1:更改为WHERE ... IN (SELECT ...),像这样:

SELECT requestID 
FROM request 
WHERE userId IN (
    SELECT userID 
    FROM department 
    WHERE desig = 'E' 
    AND dept IN (
     SELECT dept 
     FROM department 
     WHERE userId = it18 
     AND desig = 'FM' 
    ) 
); 

选项2:只强制一个结果通过使用聚合函数一样MAX(),像这:

SELECT requestID 
FROM request 
WHERE userId = (
    SELECT MAX(userID) 
    FROM department 
    WHERE desig = 'E' 
    AND dept = (
     SELECT MAX(dept) 
     FROM department 
     WHERE userId = it18 
     AND desig = 'FM' 
    ) 
); 
+0

@所有的感谢..解决了! :) – user2175325 2013-03-15 20:32:48