小编rk2*_*010的帖子

我应该使用 SQL JOIN 还是 IN 子句?

我有一个关于最佳方法的问题。当数据的大小可变时,我不确定哪种方法最好。

考虑以下 3 个表:

员工

EMPLOYEE_ID,EMP_NAME

项目

PROJECT_ID,PROJ_NAME

EMP_PROJ(以上两个表中的多对多)

EMPLOYEE_ID、PROJECT_ID

问题:给定一个 EmployeeID,找到与该员工关联的所有项目的所有员工。

我以两种方式尝试过这个。无论使用什么大小的数据,这两种方法都只有几毫秒的不同。

SELECT EMP_NAME FROM EMPLOYEE
WHERE EMPLOYEE_ID IN (
    SELECT EMPLOYEE_ID FROM EMP_PROJ    
    WHERE PROJECT_ID IN (
        SELECT PROJECT_ID FROM EMP_PROJ p, EMPLOYEE e
        WHERE p.EMPLOYEE_ID = E.EMPLOYEE_ID 
        AND  E.EMPLOYEE_ID = 123)
Run Code Online (Sandbox Code Playgroud)

select c.EMP_NAME FROM
(SELECT PROJECT_ID FROM EMP_PROJ
WHERE EMPLOYEE_ID = 123) a
JOIN 
EMP_PROJ b
ON a.PROJECT_ID = b.PROJECT_ID
JOIN 
EMPLOYEE c
ON b.EMPLOYEE_ID = c.EMPLOYEE_ID
Run Code Online (Sandbox Code Playgroud)

截至目前,我预计每个员工和项目大约有 5000 名……但不知道存在什么样的多对多关系。你会推荐哪种方法?谢谢!

编辑:方法 1 的执行计划

"Hash …
Run Code Online (Sandbox Code Playgroud)

postgresql join

13
推荐指数
2
解决办法
8713
查看次数

标签 统计

join ×1

postgresql ×1