2013-03-15 24 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