使用子查询过滤查询结果-单个表

时间:2018-07-11 19:20:36

标签: sql

我有一个表,在其中我需要所有符合第一个查询(MIS)中条件的行,但是如果EMPID <92,则只需要包含'EMP'。我敢肯定这是一个简单的声明,但我无法弄清楚。救命!

SELECT MIS.*
FROM

(SELECT EMPID, ORG, LAST_NAME, FIRST_NAME, JCODE, DPTID, TITLE, STATUS, BU, LOC, CO, SUP_ID, AL_EMPID
    FROM EMPLOYEE_TBL
    WHERE REHIRE_ELIG <> 'Y'
      AND HIRE_OVR <> 'Y'
      AND SUP_ID IS NOT NULL
      AND JCODE IS NOT NULL
      AND ORG IN ('EMP','CWD')) MIS
      WHERE MIS.ORG = 'EMP'
        AND EMPID < '9200000'
  ORDER BY MIS.ORG DESC, MIS.JCODE ASC

2 个答案:

答案 0 :(得分:0)

听起来像是左外连接。
类似的东西:
选择*
from table1 mis left外部联接table1 msi2
在mis.id = mis2.id
上 其中mis2.empid <92

那么mis2中的所有内容都是id <92。

答案 1 :(得分:0)

只需在OR中使用WHERE。我的设置是在SQL 2017中完成的,但是这是相当标准的语法,应该可以在任何SQL版本中使用。

SQL Fiddle

MS SQL Server 2017架构设置

CREATE TABLE employee_tbl ( 
    EMPID int
  , ORG varchar(5)
  , other_stuff varchar(50)
);

INSERT INTO employee_tbl (EMPID, ORG, other_stuff)
VALUES 
    ( 90000000, 'EMP', 'IncludeMe' )
  , ( 91000000, 'EMP', 'IncludeMe' )
  , ( 91000001, 'CWD', 'IncludeMe' )
  , ( 91000002, 'EMP', 'IncludeMe' )
  , ( 92000000, 'EMP', 'ExcludeMe' )
  , ( 95000000, 'EMP', 'ExcludeMe' )
;

主要查询

SELECT *
FROM employee_tbl
WHERE ( ORG = 'EMP' AND EMPID < 92000000 )
    OR ( ORG = 'CWD' )

Results

|    EMPID | ORG | other_stuff |
|----------|-----|-------------|
| 90000000 | EMP |   IncludeMe |
| 91000000 | EMP |   IncludeMe |
| 91000001 | CWD |   IncludeMe |
| 91000002 | EMP |   IncludeMe |