首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL结果组合

问MySQL结果组合
EN

Stack Overflow用户
提问于 2015-08-30 14:24:43
回答 2查看 15关注 0票数 0

我对MySQL相当陌生,我试图将几个查询合并到一个查询中遇到了一些问题。基本上我有两张桌子:

我要得到:

  • 所有IDJobs,其中StaffID不属于它的一部分
  • 所有IDJobs,其中StaffID是其中的一部分,其状态为1或6。

。

代码语言:javascript
复制
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

代码语言:javascript
复制
(
    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给我,在那里工作人员不是它的一部分。这将是更大的列表,然后使用较小的查询对其进行过滤。

任何帮助都将不胜感激。

编辑:

抽样数据如下:

代码语言:javascript
复制
Jobs Table
IDJob           JobInfo
1               Job1
2               Job2
3               Job3

。

代码语言:javascript
复制
JobPosition
PositionID      JobID      StaffID      Status
1               2          10           0
2               2          10           6
3               3          10           0

这应导致:

代码语言:javascript
复制
IDJob
1
2
EN

回答 2

Stack Overflow用户

发布于 2015-08-30 14:28:16

这是你想要的吗?

代码语言:javascript
复制
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子句中的条件聚合来计数与每个条件匹配的行数。

票数 0
EN

Stack Overflow用户

发布于 2015-08-30 14:45:59

所以,这是最终对我有效的解决方案。我不知道我是不是把它弄得太复杂了,但这是正确的结果:

代码语言:javascript
复制
(
    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
        )
)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32297553

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档