2013-10-24 6 views
1

즉 테이블이 3 개 있습니다. 사용자 daily_status는 테이블여러 테이블에서 사용자 지정 쿼리를 작성하는 방법

에서

필드를 status_types

사용자 : 사용자 테이블에 대한

id, 
name, 
department_id 

데이터 :

u1 jai 1 
u2 singh 1 
u3 test 2 

daily_status : daily_에 대한

id, 
user_id, 
status_id, 
date 

데이터 상태 테이블 :

1 u1 2 '23/10/2013' 
2 u1 3 '24/10/2013' 
3 u2 3 '23/10/2013' 
4 u3 2 '23/10/2013' 
5 u3 2 '23/10/2013' 

status_types : status_types 테이블에 대한

id, 
status_name, 

데이터

1 present 
2 leave 
3 sick 
내가 쿼리이

SELECT user.id, user.name status.name 
LEFT JOIN daily_status as ds ON (user.id=ds.user_id) 
LEFT JOIN status_types as status ON (ds.status_id=status.id) 
WHERE user.department_id=1 AND ds.date='24/10/2013' 

현재 결과처럼 만들 필요가

:

01 23,516,
u1 jai sick 

하지만 난

u1 jai sick 
u2 singh - 

결과

쿼리에 따라 좋은 싶지만 나는 그것이 나에게 해당 부서의 모든 사용자의 세부 상태에없는 사람들을 제공하도록 다시 구성 할 필요가 daily_status 테이블의 해당 날짜.

+0

* 같은 일을 할 수 있을까? 또는 모든 상태 –

+0

나는 아직 상태가 데이터베이스에 입력되지 않았 음을 의미합니다 – user2914828

답변

0
은 ON으로 날짜 유효성 검사를 이동

: 당신은 OUTER 할 경우

SELECT u.id, u.name, status.status_name 
FROM user u 
LEFT JOIN daily_status as ds ON u.id=ds.user_id AND ds.date='24/10/2013' 
LEFT JOIN status_types as status ON ds.status_id=status.id 
WHERE u.department_id=1 

sqlfiddle demo

+0

매우 고마워요 – user2914828

0

이 가입하고 만 결과를 얻을 것이다 WHERE somethingFromMyLeftJoinedTable = "뭔가"를 넣어 여기서 "뭔가" LEFT JOIN 된 테이블에 존재합니다.

이 당신이 움직일 수 중 하나를 해결하려면 WHERE이 도움이

SELECT user.id, user.name status.name 
LEFT JOIN daily_status as ds ON user.id=ds.user_id AND ds.date = '24/10/2013' 
LEFT JOIN status_types as status ON (ds.status_id=status.id) 
WHERE user.department_id=1 

희망 같은 쿼리의 가입 부분에 날짜 = 'XXX'.

+0

정말 고마워요. 정말 도움이되었습니다. – user2914828

0

SELECT user.id, user.name status.name 
from user 
LEFT JOIN daily_status as ds ON (user.id=ds.user_id AND ds.date='24/10/2013') 
LEFT JOIN status_types as status ON (ds.status_id=status.id) 
WHERE user.department_id=1 and ds.id is null 

을 시도하거나이를 단순화를 통해 난 어쩌면이

SELECT user.id, user.name ,'' as statusname 
from user 
where user.id not in 
(select ds.user_id from 
daily_status as ds 
LEFT JOIN status_types as status ON (ds.status_id=status.id) 
WHERE user.department_id=1 and ds.date = '24/10/2013') 
0

을 시도하지만 당신은 단지 주어진 날짜 24/10/2013 그래서 하나의 캔을 가지고 하나 개의 기록을 가지고 보여 주다.

주어진 날짜에 한 사람에 대해 하나의 업체 이상이있는 경우는 상태 해당 날짜의 *에 상태가없는이

SELECT a.id,a.[name],status_types.status_name FROM(SELECT id,[user].[name],department_id,ROW_NUMBER()OVER(PARTITION BY[user].[name]ORDER BY ID DESC)rn FROM[user])a LEFT JOIN daily_status AS ds ON(a.id=ds.user_id)LEFT JOIN status_types ON(ds.status_id=status_types.id)WHERE a.department_id=1AND rn=1AND ds.date='2013-10-23' 
관련 문제