首页 > 解决方案 > 具有多个条件的 SQL 查询不起作用

问题描述

好的,这是我进行查询的最佳尝试。它目前正在执行,但没有返回任何其他尝试都没有奏效的内容。

我相信连接是错误的,我不确定如何修复它们或正确执行此操作

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

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

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

StaffID 必须在 Teach 表中的 StaffID 字段中至少出现两次

spaID 5 或 6 将对应于校园,因此此时教授两个模块和 ID。

--监督超过 1 名同事

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

因此,分配给活动的员工 ID 需要监督多个同事,他们的 ID 在 SupervisorID 中出现多次。

--相关活动为内部活动

如果它等于 1,则该活动是内部的。

综上所述,只有当员工符合上述所有条件时,活动详情才会出现在查询结果中

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);

如果您想查看更多详细信息,请在下方查看表格详细信息

表活动——AcID, Title, CaID, BuID, Status, Started, Ended Internal

表分配——StaffID, AcID

表预算——BuID, Amount, Approver, Payee, Status

表校园——CaID, Address, GmName, Country, Status

餐桌教室——RmID, Capacity, CaID, Location, Type, Status

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

表空间分配——SpaID, RmID, TID, Manager, Approved

餐桌人员——StaffID, Title, FirstName, LastName, DeptID, CaID, Joined, LeftD, Current, Salary, ContractType, SupervisorID

表教——TID, ModuleID, StaffID, SpaID, Semester, Year

我已尽力解释这一点,很抱歉有任何混淆。

标签: mysqlsqljoingroup-byhaving-clause

解决方案


如果无法访问数据很难判断,但您可以尝试将其更改inner joinsleft 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

推荐阅读