Mysql 具有多个条件的SQL查询不起作用
好的,这是我提出问题的最好尝试。它当前执行,但不返回任何其他尝试未起作用的结果 连接是错误的,我相信,我不知道如何修复它们或这样做的权利 在这个查询中,我试图获得分配给这些活动的人员的活动详细信息,这些人员符合以下所有条件 员工和活动在分配表中链接,员工ID分配给分配表中的活动ID --在2019年期间,在某个校园教授至少2个模块 标记必须在现场标记处的示教表中至少出现两次 SPAID5或6将与校园相对应,因此此时教授两个模块和ID --管理超过1名同事 这在staff表中,SupervisorID是同一表中StaffID的外键 因此,分配给活动的员工ID需要监督多个同事,他们的ID在SupervisorID中出现多次 --相关活动是内部活动 如果活动等于1,则该活动为内部活动 因此,综上所述,只有当员工符合上述所有条件时,活动详细信息才会出现在查询结果中Mysql 具有多个条件的SQL查询不起作用,mysql,sql,join,group-by,having-clause,Mysql,Sql,Join,Group By,Having Clause,好的,这是我提出问题的最好尝试。它当前执行,但不返回任何其他尝试未起作用的结果 连接是错误的,我相信,我不知道如何修复它们或这样做的权利 在这个查询中,我试图获得分配给这些活动的人员的活动详细信息,这些人员符合以下所有条件 员工和活动在分配表中链接,员工ID分配给分配表中的活动ID --在2019年期间,在某个校园教授至少2个模块 标记必须在现场标记处的示教表中至少出现两次 SPAID5或6将与校园相对应,因此此时教授两个模块和ID --管理超过1名同事 这在staff表中,Supervisor
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、标题、CaID、BuID、状态、开始、结束内部
表分配--StaffID,AcID
表预算--BuID、金额、审批人、收款人、状态
表校园--CaID、地址、GmName、国家/地区、状态
表教室--RmID、容量、CaID、位置、类型、状态
表模块--ModuleID、模块名称、部门、计划、TMode、首次报价日期
表SpaceAssign--SpaID、RmID、TID、经理、已批准
表职员--StaffID、Title、FirstName、LastName、DeptID、CaID、Joined、LeftD、Current、Salary、ContractType、SupervisorID
表格教学--TID、ModuleID、StaffID、SpaID、学期、年份
我已经尽了最大的努力解释了这一点,很抱歉有任何混淆。如果没有访问数据的权限,很难判断,但是您可以尝试将内部联接更改为左侧联接,并且:
这个
应该是
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);
请共享示例输入数据、该示例的预期输出以及适当形式的表结构(带有列类型)。这使得重现你的问题变得更容易抱歉,我想我可能让它部分工作,并且我使用的测试数据可能是问题所在,所以我想我应该在这里结束问题,同时我整理并再次尝试修复它
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);