gpt4 book ai didi

mysql - SQL 慢速嵌套查询

转载 作者:行者123 更新时间:2023-12-01 00:30:41 24 4
gpt4 key购买 nike

我有一张名为 Staff 的表和一张名为 Supervisors 的表。

员工有 StaffIDFirstNameLastName 等...

主管包含RelationshipID, StaffID, SupervisorID, SetBy, SetOn, 状态

基本上,Supervisors 表为我们提供了 Staff self 关系的审计线索。我们有一张 Staff 表,还有一张 Staff:Staff 关系表(主管:员工),其中包含一些额外信息(过时的、当前的、不正确的)以及设置它的 StaffID 和设置时间。

现在,我正在编写查询以查找所有孤儿员工。我有:

SELECT *
FROM Staff
WHERE StaffID NOT IN (SELECT StaffID
FROM Supervisors
WHERE Status = 0
OR Status = 2);

(状态 0 是来自公司数据库的初始加载,状态 2 是经过验证的修改记录。所有其他的都是“过时的”、“不正确的”等...)

问题是我有超过 6000 名员工和超过 5000 名员工:主管关系,这基本上是一个 NxM 查询,这意味着 MySQL 必须筛选 300 万个排列。

我不是 SQL 高手,有更好的方法吗?

(注意,我根本不希望经常运行这个特定的查询)

最佳答案

假设 SUPERVISOR.staffidSUPERVISOR.status不可空,使用:

   SELECT st.*
FROM STAFF st
LEFT JOIN SUPERVISOR s ON s.staffid = st.staffid
AND s.status NOT IN (0,2)
WHERE s.staffid IS NULL

否则,NOT IN/NOT EXISTS 是等效的,并且如果列可以为 null 则性能更好。

更多信息:

关于mysql - SQL 慢速嵌套查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6824725/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com