SQL 多条件查询无效

SQL Query with multiple conditions not working

好的,这是我进行查询的最佳尝试。它当前正在执行,但 returns 其他尝试都没有奏效。

我认为联接是错误的,我不确定如何修复它们或正确执行此操作

在此查询中,我试图获取 activity 详细信息,其中包含分配给符合以下所有条件的那些活动的员工。

员工和活动在分配 table 中链接,员工 ID 分配给那里的 Activity ID。

--2019年在某校区至少教授2个模块

staffID 必须在 Teach table 字段 StaffID

中至少出现两次

spaID 5 或 6 对应校区所以此时教两个模块和 ID。

--主管1个以上同事

这在员工 table 中,SupervisorID 是同一 table 中 StaffID 的外键。

所以分配给activity的Staff ID需要监管不止一个同事,并且他们的ID在SupervisorID中出现不止一次

--相关的activity是内部的

如果 activity 等于 1,则它是内部的。

所以综上所述,activity 详细信息只有在员工符合上述所有条件时才会出现在查询结果中

SELECT Activity.AcID, Activity.Title, Activity.CaID, Activity.Internal, Activity.BuID, Budget.Amount FROM Activity


INNER JOIN Budget ON Activity.AcID = Budget.BuID
INNER JOIN Allocation ON Activity.AcID = Allocation.AcID
INNER JOIN Staff ON Allocation.StaffID = Staff.StaffID
INNER JOIN Teach ON Allocation.StaffID = Teach.StaffID

WHERE Activity.Internal=1 AND 

Allocation.StaffID IN (
SELECT Staff.SupervisorID
FROM Staff
GROUP BY StaffID
HAVING COUNT(Staff.SupervisorID=Allocation.StaffID) >1) 
 
AND Allocation.StaffID IN (
    
SELECT Teach.StaffID
FROM Teach
WHERE Teach.Year='2019' AND Teach.SpaID=5 OR 6
GROUP BY Teach.StaffID
HAVING COUNT(Allocation.StaffID=Teach.StaffID) >=2);

Table详情如下

Table Activity -- AcID, Title, CaID, BuID, Status, Started, Ended Internal

Table 分配 -- StaffID, AcID

Table 预算 -- BuID, Amount, Approver, Payee, Status

Table校园--CaID, Address, GmName, Country, Status

Table 教室 -- RmID, Capacity, CaID, Location, Type, Status

Table 模块 -- ModuleID, Module Name, DeptID, Programme, TMode, Date_of_Firstoffer

Table 空间分配 -- SpaID, RmID, TID, Manager, Approved

Table 员工 -- StaffID, Title, FirstName, LastName, DeptID, CaID, Joined, LeftD, Current, Salary, ContractType, SupervisorID

Table 教导 -- TID, ModuleID, StaffID, SpaID, Semester, Year

我已经尽力解释清楚了,如有任何混淆,请见谅。

如果不访问数据很难判断,但您可以尝试将 inner joins 更改为 left joins 并且:

这个

WHERE Teach.Year='2019' AND Teach.SpaID=5 OR 6

应该是

WHERE Teach.Year='2019' AND (Teach.SpaID=5 OR Teach.SpaID=6)

这看起来也不正确:

INNER JOIN Budget ON Activity.AcID = Budget.BuID

应该是:

INNER JOIN Budget ON Activity.BuID = Budget.BuID

没有数据很难找到解决方案。请试试这个:

SELECT Activity.AcID, Activity.Title, Activity.CaID, Activity.Internal, Activity.BuID, Budget.Amount FROM Activity


INNER JOIN Budget ON Activity.AcID = Budget.BuID
INNER JOIN Allocation ON Activity.AcID = Allocation.AcID
INNER JOIN Staff ON Allocation.StaffID = Staff.StaffID
INNER JOIN Teach ON Allocation.StaffID = Teach.StaffID

WHERE Activity.Internal=1 AND 

Allocation.StaffID IN (
SELECT Staff.SupervisorID
FROM Staff
GROUP BY SupervisorID
HAVING COUNT(*) >1) 
 
AND Allocation.StaffID IN (
    
SELECT Teach.StaffID
FROM Teach
WHERE Teach.Year='2019' AND Teach.SpaID=5 OR 6
GROUP BY Teach.StaffID
HAVING COUNT(*) >=2);