我对MySQL相当陌生,我试图将几个查询合并到一个查询中遇到了一些问题。基本上我有两张桌子:
我要得到:
。
Jobs
------------------
IDJob - The PKey
JobInfo - Some Data
JobPosition
------------------
PositionID - Each Job can have multiple positions
JobID - Value from Jobs Table
StaffID - Value from Staffs Table
Status - Status of Staff for the Job我想让所有的IDJobs
(
SELECT JobID AS IDJob
FROM SelectedStaff
WHERE StaffID <>10
)
UNION
(
SELECT IDJob
FROM Jobs
WHERE IDJob
IN (
SELECT JobID
FROM SelectedStaff
WHERE SelectStatus
IN ( 1, 6 )
AND StaffID =10
)
)但是结果是没有返回工作it给我,在那里工作人员不是它的一部分。这将是更大的列表,然后使用较小的查询对其进行过滤。
任何帮助都将不胜感激。
编辑:
抽样数据如下:
Jobs Table
IDJob JobInfo
1 Job1
2 Job2
3 Job3。
JobPosition
PositionID JobID StaffID Status
1 2 10 0
2 2 10 6
3 3 10 0这应导致:
IDJob
1
2发布于 2015-08-30 14:28:16
这是你想要的吗?
select jp.JobId
from JobPosition jp
group by jp.JobId
having sum(StaffId = 10) = 0 or -- Staff10 is not part of the job
sum(StaffId = 10 and status in (1, 6)) > 0这使用where子句中的条件聚合来计数与每个条件匹配的行数。
发布于 2015-08-30 14:45:59
所以,这是最终对我有效的解决方案。我不知道我是不是把它弄得太复杂了,但这是正确的结果:
(
SELECT IDJob
FROM Jobs
WHERE IDJob
NOT IN (
SELECT JobID AS IDJob
FROM JobPosition
WHERE StaffID = 10
)
)
UNION
(
SELECT IDJob
FROM Jobs
WHERE IDJob
IN (
SELECT JobID
FROM SelectedStaff
WHERE JobPosition IN (1,6)
AND StaffID=10
)
)https://stackoverflow.com/questions/32297553
复制相似问题