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'
)
);
Run Code Online (Sandbox Code Playgroud)
Mic*_*son 12
使用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'
Run Code Online (Sandbox Code Playgroud)
或者,你可以简单地替换=有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'
)
);
Run Code Online (Sandbox Code Playgroud)
它们应该返回相同的结果,但要同时检查两者的性能是否存在差异.
有两种方法可以处理它:
选项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'
)
);
Run Code Online (Sandbox Code Playgroud)
选项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'
)
);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
21032 次 |
| 最近记录: |