17,090
社区成员
发帖
与我相关
我的任务
分享
select t.*
from p_employee t,
(select distinct (t1.employee_id)
from p_employee_sta_relat t1,
(select org_id
from (select org_id, parent_id
from o_org
where USED_STATE = 1)
connect by prior org_id = parent_id
start with org_id = #orgId#) t2
where t1.org_id = t2.org_id
and t1.recond_state='1') t3
where t.employee_id = t3.employee_id
and t.property_c <> '4'
<isNotEmpty>......</isNotEmpty>
--试试下面这几个语句
SELECT T.*
FROM P_EMPLOYEE T,
(SELECT /*+ FIRST_ROWS */
T1.EMPLOYEE_ID
FROM P_EMPLOYEE_STA_RELAT T1,
(SELECT ORG_ID
FROM O_ORG
WHERE USED_STATE = 1
CONNECT BY PRIOR ORG_ID = PARENT_ID
START WITH ORG_ID = '1') T2
WHERE T1.ORG_ID = T2.ORG_ID
AND T1.RECOND_STATE = '1'
GROUP BY T1.EMPLOYEE_ID) T3
WHERE T.EMPLOYEE_ID = T3.EMPLOYEE_ID
AND (T.PROPERTY_C > '4' OR T.PROPERTY_C < '4');
--OR
CREATE TABLE O_ORG_TMP AS
SELECT ORG_ID
FROM O_ORG
WHERE USED_STATE = 1
CONNECT BY PRIOR ORG_ID = PARENT_ID
START WITH ORG_ID = '1';
CREATE INDEX O_ORG_TMP_IDX ON O_ORG_TMP(ORG_ID);
SELECT T.*
FROM P_EMPLOYEE T,
(SELECT /*+ FIRST_ROWS */
T1.EMPLOYEE_ID
FROM P_EMPLOYEE_STA_RELAT T1,
O_ORG_TMP T2
WHERE T1.ORG_ID = T2.ORG_ID
GROUP BY T1.EMPLOYEE_ID) T3
WHERE T.EMPLOYEE_ID = T3.EMPLOYEE_ID
AND (T.PROPERTY_C > '4' OR T.PROPERTY_C < '4');
--OR
CREATE TABLE O_ORG_TMP AS
SELECT ORG_ID
FROM O_ORG
WHERE USED_STATE = 1
CONNECT BY PRIOR ORG_ID = PARENT_ID
START WITH ORG_ID = '1';
CREATE INDEX O_ORG_TMP_IDX ON O_ORG_TMP(ORG_ID);
SELECT T.*
FROM P_EMPLOYEE T
WHERE (T.PROPERTY_C > '4' OR T.PROPERTY_C < '4')
AND EXISTS (SELECT 1
FROM P_EMPLOYEE_STA_RELAT T1, O_ORG_TMP T2
WHERE T1.ORG_ID = T2.ORG_ID
AND T1.EMPLOYEE_ID = T.EMPLOYEE_ID);
--OR
CREATE TABLE O_ORG_TMP AS
SELECT ORG_ID
FROM O_ORG
WHERE USED_STATE = 1
CONNECT BY PRIOR ORG_ID = PARENT_ID
START WITH ORG_ID = '1';
CREATE INDEX O_ORG_TMP_IDX ON O_ORG_TMP(ORG_ID);
SELECT DISTINCT T.*
FROM P_EMPLOYEE T, P_EMPLOYEE_STA_RELAT T1, O_ORG_TMP T2
WHERE T.EMPLOYEE_ID = T2.EMPLOYEE_ID
AND T1.ORG_ID = T2.ORG_ID
AND (T.PROPERTY_C > '4' OR T.PROPERTY_C < '4');
--你试试这个能出数据么。看看效率如何。
SELECT T.*
FROM P_EMPLOYEE T,
(SELECT /*+ FIRST_ROWS */
T1.EMPLOYEE_ID
FROM P_EMPLOYEE_STA_RELAT T1
RIGHT O_ORG T2 ON T1.ORG_ID = T2.ORG_ID
AND T2.USED_STATE = 1
WHERE T2.USED_STATE = 1
CONNECT BY PRIOR T2.ORG_ID = T2.PARENT_ID
START WITH T2.ORG_ID = '1'
GROUP BY T1.EMPLOYEE_ID) T3
WHERE T.EMPLOYEE_ID = T3.EMPLOYEE_ID
AND (T.PROPERTY_C > '4' OR T.PROPERTY_C < '4');
create table P_EMPLOYEE_STA_RELAT
(
ORG_ID VARCHAR2(20) not null,
EMPLOYEE_ID VARCHAR2(20) not null,
JOB_TYPE NUMBER default 1 not null,
MATCH_GRADE NUMBER default -1,
RESULT_AVAIL NUMBER default 0,
MATCH_D DATE,
PARTY_CHIEF_FLAG VARCHAR2(8),
MANAGER_TYPE_C VARCHAR2(8),
CONFIGURE_TYPE_C VARCHAR2(8),
RECEDE_FLAG NUMBER,
MANAGER_WORK VARCHAR2(512),
CHANGE_D DATE,
ASSIGN_WORK VARCHAR2(255),
AUTHORIZE_CORP VARCHAR2(20),
AUTHORIZE_FILE VARCHAR2(100),
AUTHORIZE_D DATE,
REMARK VARCHAR2(300),
CHANGE_REASON VARCHAR2(255),
JOB_LEVEL_C VARCHAR2(8),
DATA_MODIFY DATE,
NAME VARCHAR2(100),
CORP_ID VARCHAR2(20),
DEPT_ID VARCHAR2(20),
GROUP_ID VARCHAR2(20),
ERP_CORP_ID VARCHAR2(42),
ERP_DEPT_ID VARCHAR2(42),
ERP_STATION_ID VARCHAR2(42),
SYNCH_DATE DATE,
RECOND_STATE VARCHAR2(1) default 1,
ERP_RECOND_ID VARCHAR2(100),
DEPT_ID2 VARCHAR2(20)
)
create table P_EMPLOYEE
(
EMPLOYEE_ID VARCHAR2(20) not null,
EMPLOYEE_NO VARCHAR2(20),
SERIATE_NUMBER NUMBER default 999,
IDCARD_NUMBER VARCHAR2(20),
NAME VARCHAR2(20),
ADMIN_CORP VARCHAR2(20),
ARCHIVES_CORP VARCHAR2(20),
SALARY_CORP VARCHAR2(20),
LABOR_STAT_CORP VARCHAR2(20),
IDENTITY_C VARCHAR2(18),
WORKING_FORM_C VARCHAR2(18),
PROPERTY_C VARCHAR2(18),
SERVICE_STATE_C VARCHAR2(18),
SOCIAL_SECURITY_NO VARCHAR2(18),
PASSPORT_NO VARCHAR2(30),
NAME_SPELL VARCHAR2(100),
USED_NAME VARCHAR2(30),
SEX_C VARCHAR2(18),
NATIONALITY_C VARCHAR2(18),
BIRTHDAY DATE,
NATIVEPLACE VARCHAR2(100),
REG_PERM_PROP_C VARCHAR2(18),
HOMEPLACE VARCHAR2(100),
HABITATION VARCHAR2(100),
REG_PERM_LOCUS VARCHAR2(100),
PARTY_C VARCHAR2(18),
JOIN_CLAN_D DATE,
BEGIN_WORK_D DATE,
ENTER_EP_D DATE,
ENTER_CUR_CORP_D DATE,
RETIRED_FROM_ARMY VARCHAR2(18),
ADD_REASON_C VARCHAR2(18),
O_CORP_NAME VARCHAR2(100),
SUB_REASON_C VARCHAR2(18),
TO_CORP_NAME VARCHAR2(100),
SUB_DATE DATE,
ADD_PASS_FILE VARCHAR2(100),
SUB_PASS_FILE VARCHAR2(100),
MOBILE VARCHAR2(30),
OFFICE_TEL VARCHAR2(30),
EMAIL VARCHAR2(100),
FAX VARCHAR2(30),
HOME_TEL VARCHAR2(30),
HOME_ADDR VARCHAR2(100),
HOME_POSTALCODE VARCHAR2(20),
TAG NUMBER,
PHOTO VARCHAR2(100),
CON_LEN_SERVICE NUMBER default 0,
DISCON_LEN_SERVICE NUMBER default 0,
REMARK VARCHAR2(300),
TYPES_C VARCHAR2(18),
EDUCATION_TIME NUMBER default 0,
DATA_MODIFY DATE,
DATA_CHANGE DATE,
STATE_C VARCHAR2(18),
MARRIED_C VARCHAR2(18),
DIRECT_C VARCHAR2(18),
SUPPORT_C VARCHAR2(18),
HEALTH_STATUS VARCHAR2(10),
PPID VARCHAR2(100),
SELF_PASSWORD VARCHAR2(40) default '888888',
CHECK_FLAG VARCHAR2(10) default '0',
NEW_EMPLOYEE_FLAG VARCHAR2(1),
PHOTOS BLOB,
ERP_EMPLOYEE_ID VARCHAR2(50),
DIRECT_MANAGE_C VARCHAR2(20),
RECOND_STATE VARCHAR2(1) default 1,
ERP_RECOND_ID VARCHAR2(50),
SYNCH_DATE DATE,
DATE_INSERT DATE default sysdate,
O_CORP_ID VARCHAR2(10),
ERP_PERSG1 VARCHAR2(20),
ERP_PERSK VARCHAR2(20)
)
create table O_ORG
(
ORG_ID VARCHAR2(20) not null,
PARENT_ID VARCHAR2(120),
ORG_ID_EXT VARCHAR2(20),
NAME VARCHAR2(100) not null,
BRIEF_NAME VARCHAR2(40),
ORG_TYPE_C VARCHAR2(8),
ORG_LEVEL_C VARCHAR2(8),
ORG_ATTRIB_C VARCHAR2(8),
ORG_SEQ_C VARCHAR2(8),
USED_STATE NUMBER default 1,
SETUP_D DATE,
REPEAL_D DATE,
SETUP_FILE_NO VARCHAR2(100),
REPEAL_FILE_NO VARCHAR2(100),
SETUP_FILE VARCHAR2(200),
REPEAL_FILE VARCHAR2(200),
DUMMY_ORG NUMBER default 0,
PLAN_NUM_P NUMBER default 0,
PLAN_NUM_ORG NUMBER default 0,
REMARK VARCHAR2(300),
SORT NUMBER default 888888,
DATA_MODIFY DATE,
LAOZI_ID VARCHAR2(20),
PPID VARCHAR2(100),
IS_LEGAL VARCHAR2(1),
ERP_ID VARCHAR2(50),
SYNCH_DATE DATE,
RECOND_STATE VARCHAR2(1),
FLAG VARCHAR2(20)
)
--新的,T3这个表查出内容为空。
SELECT T.*
FROM P_EMPLOYEE T,
(SELECT /*+ FIRST_ROWS */
T1.EMPLOYEE_ID
FROM p_employee_sta_relat T1, o_org T2
WHERE T2.USED_STATE = 1
AND T1.ORG_ID = T2.ORG_ID
AND T1.RECOND_STATE = '1'
CONNECT BY PRIOR T2.ORG_ID = T2.PARENT_ID
START WITH T2.ORG_ID = '1'
GROUP BY T1.EMPLOYEE_ID) T3
WHERE T.EMPLOYEE_ID = T3.EMPLOYEE_ID
AND T.PROPERTY_C <> '4';
--原来的
select t.*
from p_employee t,
(select distinct (t1.employee_id)
from p_employee_sta_relat t1,
(select org_id
from (select org_id, parent_id
from o_org
where USED_STATE = 1)
connect by prior org_id = parent_id
start with org_id = '1') t2
where t1.org_id = t2.org_id
and t1.recond_state='1') t3
where t.employee_id = t3.employee_id
and t.property_c <> '4'
--试试这个
SELECT T.*
FROM P_EMPLOYEE T,
(SELECT /*+ FIRST_ROWS */
T1.EMPLOYEE_ID
FROM P_EMPLOYEE_STA_RELAT T1, O_ORG T2,
WHERE T2.USED_STATE = 1
AND T1.ORG_ID = T2.ORG_ID
AND T1.RECOND_STATE = '1'
CONNECT BY PRIOR T2.ORG_ID = T2.PARENT_ID
START WITH T2.ORG_ID = #ORGID#
GROUP BY T1.EMPLOYEE_ID) T3
WHERE T.EMPLOYEE_ID = T3.EMPLOYEE_ID
AND T.PROPERTY_C <> '4';