2013-02-13 2 views
3

에서 날짜 범위의 처음부터 가입 날짜 (날짜 형식 : YYYY-MM-DD) :
1) 표 - EMPLOYEE_OVERTIMES (별칭 : EO)
내가 다음과 같은 두 개의 테이블이 두 개의 테이블이

EMPLOYEE_ID | OVERTIME_DATE 
------------------------------------------------ 
1   | 2012-04-01 
2   | 2012-08-14 
3   | 2012-07-22 
4   | 2012-10-30 
5   | 2012-06-07 

2) 표 2 - EMPLOYEE_HOLIDAYS (별칭 : EH)

EMPLOYEE_ID | START_DATE | END_DATE | 
----------------------------------------- 
1   | 2012-03-28 | 2012-04-10 
2   | 2012-01-14 | 2012-01-30 
3   | 2012-07-15 | 2012-07-25 
4   | 2012-10-10 | 2012-10-13 
5   | 2012-06-01 | 2012-06-07 

EMPLOYEE_OVERTIMES 및 EMPLOYEE_HOLIDAYS 다른 테이블에서 조인 된 테이블. EH.START_DATE < = EO.OVERTIME_DATE < = EH.END_DATE

3) 결과 테이블

EMPLOYEE_ID | START_DATE | END_DATE | OVERTIME_DATE 
------------------------------------------------------- 
1   | 2012-03-28 | 2012-04-10 | 2012-04-01 
3   | 2012-07-15 | 2012-07-25 | 2012-07-22 
5   | 2012-06-01 | 2012-06-07 | 2012-06-07 

답변

1

SQLFiddle demo

SELECT EH.*, EO.OVERTIME_DATE 
FROM EMPLOYEE_HOLIDAYS EH 
JOIN EMPLOYEE_OVERTIMES EO 
ON (EO.EMPLOYEE_ID = EH.EMPLOYEE_ID) AND 
    (EO.OVERTIME_DATE BETWEEN EH.START_DATE AND EH.END_DATE) 
+0

그러나 나는 두 테이블의 레코드를 많이 무엇을해야합니다 경우 가입 사용할 수 있습니까? – BlueLettuce16

+0

가입 필드에 인덱스가 있는지 확인하십시오 (EO.EMPLOYEE_ID, EH.EMPLOYEE_ID, EO.OVERTIME_DATE, EH.START_DATE, EH.END_DATE). 인덱스가 있으면 조인이 빠르게 작동합니다. – valex

0

것이다 : 나는 folowing 기준을 충족하는 모든 레코드를 찾을 싶습니다 이 일?

SELECT 
    EO.Employee_ID, 
    EH.Start_Date, 
    EH.End_Date, 
    EO.OverTime_Date 
FROM 
    EMPLOYEE_OVERTIMES EO INNER JOIN 
    EMPLOYEE_HOLIDAYS EH ON EO.Employee_ID = EH.Employee_ID 
WHERE 
    EO.Overtime_Date BETWEEN EH.Start_date and EH.End_Date 
0

당신은 간단한 INNER가 나는 또한 간단한 가입에 대해 생각했다

;WITH EO AS 
(
    SELECT 1 AS EID, '2012-04-01' AS OD 
    UNION ALL 
    SELECT 2, '2012-08-14' 
    UNION ALL 
    SELECT 3, '2012-07-22' 
    UNION ALL 
    SELECT 4, '2012-10-30' 
    UNION ALL 
    SELECT 5, '2012-06-07' 
), EH AS 
(
    SELECT 1 AS EID, '2012-03-28' AS SD, '2012-04-10' AS ED 
    UNION ALL 
    SELECT 2, '2012-01-14', '2012-01-30' 
    UNION ALL 
    SELECT 3, '2012-07-15', '2012-07-25' 
    UNION ALL 
    SELECT 4, '2012-10-10', '2012-10-13' 
    UNION ALL 
    SELECT 5, '2012-06-01', '2012-06-07' 
) 

SELECT EH.EID, EH.SD, EH.ED, EO.OD 
FROM EO 
INNER JOIN EH 
    ON EH.SD <= EO.OD AND EO.OD <= EH.ED