6
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'
      )
);
4

2 に答える 2

13

を使用してこのクエリを記述すると、より明確になります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'
      )
);

どちらも同じ結果を返すはずですが、両方を試して、パフォーマンスに違いがあるかどうかを確認してください。

于 2013-03-15T19:34:47.030 に答える
6

これに対処するには、次の 2 つの方法があります。

オプション 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()に、集計関数を使用して 1 つの結果のみを強制します。

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'
      )
);
于 2013-03-15T19:39:58.570 に答える