2014-12-10 2 views
0

는 무료 (직원이 할당 된 작업없이 현재)입니다 직원MySQL의 쿼리는 무료로 직원

작업 테이블의 샘플 데이터를 나열하는 MySQL의 쿼리를 작성 도와주세요 찾을 수

emp_id task_start_date  task_compeletion_date task_name 
    872 2014-06-03 17:14:44 2014-06-04 17:14:46 task1 
    873 2014-07-12 19:02:00 2014-07-13 00:25:00 task2 
    872 2014-12-03 13:09:08 2014-12-30 12:54:15 task7 
    874 2014-12-10 07:29:53 NULL     task3 

emp 테이블의 샘플 데이터

emp_id first_name   last_name 
    872 John   David 
    873 Suresh   Kumar 
    874 Peter   Nail 
    875 Zio    Xing   

나는이 쿼리를 생성

select * from emp where emp_id not in (select emp_id from task) union select emp.* from emp emp, task task where emp.emp_id = task.emp_id and (task.task_compeletion_date is not null or task.task_compeletion_date<now()) ; 
,

하지만 그것은 IS NULL 조건 필요한 목록

+0

'task_compeletion_date'는 emllee가 무료라는 것을 의미하는 NUll입니까? – Umair

+0

작업 당 오직 한 명의 직원 만 있습니까? – Strawberry

답변

1

을 사용 LEFT JOIN를 반환하지 않습니다

SELECT emp.* 
FROM emp LEFT JOIN 
task on emp.emp_id=task.emp_id 
WHERE task.task_start_date IS NULL 

설명 :

이 쿼리는 id가 작업 테이블에없는 모든 직원을 가져옵니다.

결과 :

EMP_ID FIRST_NAME LAST_NAME 
875  Zio   Xing 

SQL Fiddle 결과를 참조하십시오.

편집 :

SELECT emp.* 
FROM emp LEFT JOIN 
task on emp.emp_id=task.emp_id 
WHERE task.task_start_date IS NULL 
     OR (task.task_compeletion_date IS NOT NULL 
      AND task.emp_id NOT IN (SELECT emp_id from task where task_compeletion_date>CURDATE())) 
GROUP BY emp.emp_id,emp.first_name,emp.last_name 

Demo 참조 : 무료 직원에 대한

.

+0

무료 직원은 현재 날짜 시간에 작업 – techbrainless

+0

에 할당되지 않았 음을 의미합니다. @techbrainless : 작업 테이블에 무료 직원이 포함될 수 있습니다. –

+0

무료 직원은 현재 datetime에서 다음의 조건 중 하나에서 직원이 무료가 될 수 있음을 의미하는 작업에 할당되지 않음을 의미합니다. 1. 직원은 emp 테이블에 있지만 작업 테이블에 존재하지 않습니다. 2. emp는 emp task_compeletion_date가 포함 된 작업 테이블 3. emp는 미래의 emp 및 task 테이블에 존재합니다. task_compeletion_date – techbrainless

1

EUH 나는 잘 모르겠지만, 난이 할 것입니다 생각 : @CodeBird 쿼리를 기반으로

SELECT * from emp WHERE emp_id NOT IN 
(
    SELECT emp_id FROM task 
    WHERE task_compeletion_date>NOW() 
) 

fiddle

+0

무료 직원은 현재 datetime에서 다음 조건 중 하나에서 직원이 무료라는 것을 의미하는 작업에 할당되지 않음을 의미합니다. 1. 직원이 emp 테이블에 있지만 작업 테이블에 존재하지 않음을 의미합니다. emp는 emp task_compeletion_date가 포함 된 작업 테이블 3. emp는 미래의 task_compeletion_date와 함께 emp와 task 테이블에 존재합니다. – techbrainless

+0

@techbrainless가 내 대답을 업데이트했습니다. – CodeBird

+0

@techbrainless는 다시 편집했습니다. 지금은 좋다고 생각합니다. – CodeBird

0

(노조를 사용하여 withoug), 쿼리는 다음

로 단순화 될 수있다
select * from emp where emp_id not in (select emp_id from tasksample where task_compeletion_date>now() or task_compeletion_date is NULL); 

감사합니다. CodeBird. 간단한 쿼리를 사용하여 필요한 답을 얻기 위해 다른 조건을 추가 할 수있었습니다.