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'
)
);
29841 次
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 に答える