【问题标题】:Only show results for occupation table if there is only 1 row如果只有 1 行,则仅显示职业表的结果
【发布时间】:2021-12-01 23:49:50
【问题描述】:

我有 2 张桌子,PERSONSOCCUPATION。我需要确定PERSONS 表中的STATUS 字段是否显示“活动”,而OCCUPATION 表中的STATUS 字段是否显示“终止”。但是,有时员工有 2 个职业,因此OCCUPATION 表中有 2 行,一行显示“Active”,另一行显示“Terminated”。

我只想查看 PERSONS 表中 status = 'Active' 的记录,并且仅当 OCCUPATION 表中只有 1 行显示“Terminated”时才显示。我需要隐藏一个职业仍处于活动状态而另一个职业已被终止的记录。

我被困住了。我已经走到这一步了:

SELECT
OCCUPATION.STATUS,
PERSONS.STATUS,
PERSONS.UPID
FROM OCCUPATION
    INNER JOIN PERSONS
    ON OCCUPATION.PERSONID = PERSONS.QSID
WHERE occupation.STATUS <> PERSONS.STATUS
AND occupation.STATUS = 'Terminated'

有人可以帮忙吗?非常感谢。

【问题讨论】:

    标签: count


    【解决方案1】:

    我提出这样的建议: http://sqlfiddle.com/#!9/85a0ab/2

    SELECT people.* 
    FROM PEOPLE 
    WHERE
    people.pstatus = 'Active'
    AND people.pid IN (
      SELECT pid
      FROM OCCUPATION 
      WHERE occupation.ostatus = 'Terminated' 
      AND pid NOT IN 
        (SELECT pid FROM OCCUPATION WHERE occupation.ostatus <> 'Terminated')
    );
    

    所以我在occupations 中选择了people.id,它们是“终止的”并且没有出现在“非终止”列表中。然后,我使用people_id 的列表来选择Active 的人。

    使用JOIN 可能更好。

    【讨论】:

      猜你喜欢
      • 2021-04-12
      • 1970-01-01
      • 2016-03-08
      • 1970-01-01
      • 1970-01-01
      • 2019-01-12
      • 1970-01-01
      • 2013-02-19
      • 1970-01-01
      相关资源
      最近更新 更多