2013-07-24 1 views
0

약속 데이터베이스에서 보고서를 반환하려고합니다. 내 현재의 SQL 쿼리를 첨부, 나는 데 어려움은 내가명명 된 데이터베이스에서 값을 반환하는 SQL 쿼리 만들기

join contacts on (customer.entity_id = contact.contact_id and contacts.arch = 'contact.phonenumber') 
    join contact_detail on (contact_detail.contact_id = contacts.contact_id and contact_detail.lookup = 'mobile') 

즉, 내 고객 연락처 테이블을 "결합"때 즉시 해당 테이블과 세부 사항에 대한 항목이하지 않은 모든 고객을 잃을 것입니다 테이블, 내가 달성하고자하는 것이 클라이언트가 연락처 항목이 없다면 해당 필드에 null을 반환한다는 것입니다. 즉 나는

Name Time note Mobile 
DAVID 8pm haircut 0412656865 
Julie 8pm style 
Daniel 8pm Colour 0412533535 

을 갈 수도에 가입하지만, 그 라인

DAVID 8pm haircut 0412656865 
Daniel 8pm Colour 0412533535 

그녀는 간단한 그게 더 contact.phonenumber

이 없기 때문에이 줄리 제외를 추가하는 추가하기 전에 문제. 나는 줄리가이 시스템은 테이블, 참여하고 몇 가지 세부 사항 및 조회 테이블을 역할을, 따라서 우리는 엔티티 테이블을 사용 프론트 엔드 구동되는 자바 원형과 MySQL 데이터베이스를 사용하는 NULL 값

반환 할 것을 선호 할 것입니다.

실제 SQL 쿼리는

select 
p.activity_start_time 
, p.activity_end_time 
, p.activity_start_time AS start_time 
, p.activity_end_time as end_time 
, a.status 
, a.description AS appointmentnote 
, e.name as patientname 
, e.description AS patientdescription 
, customer.name as customername 
, customer.description as customerdescription 
, sd.name as schedule_name 
, eAt.name as appointment_type 
, mobile.description as Mobile 
from acts a 
join participations p on 
a.act_id=p.act_id and a.arch_short_name='act.customerAppointment' and 
p.act_arch_short_name='act.customerAppointment' 
join entities e on p.entity_id=e.entity_id 
join participations pAt on a.act_id=pAt.act_id and 
a.arch_short_name='act.customerAppointment' and 
pAt.arch_short_name='participation.appointmentType' 
join entities eAt on pAt.entity_id=eAt.entity_id 
left join entity_relationships er ON (er.target_id = e.entity_id 
AND er.active_start_time <= date_add((date_format('2013-07-24',"%Y-%m-%d")), 
INTERVAL "00:00:00" HOUR_SECOND) 
AND ((er.active_end_time >= date_add((date_format('2013-07-24',"%Y-%m-%d")), 
INTERVAL "23:59:59" HOUR_SECOND)) OR (er.active_end_time IS NULL))) 
left join entities customer ON 
(customer.entity_id = er.source_id AND customer.arch_short_name = 'party.customerperson') 

join contacts mobile on (mobile.party_id = customer.entity_id AND mobile.arch_short_name = 'contact.phoneNumber') 
join contact_classifications mb_class on (mb_class.contact_id = mobile.contact_id AND mb_class.lookup_id = '120') 

join participations schedule on 
a.act_id=schedule.act_id and schedule.arch_short_name='participation.schedule' 
left join entities sd on 
(sd.entity_id = schedule.entity_id) 
left outer join act_details d on 
a.act_id=d.act_id 
where (p.activity_start_time<date_add((date_format('2013-07-24',"%Y-%m-%d")), 
INTERVAL "00:00:00" HOUR_SECOND) 
and p.activity_end_time>date_add((date_format('2013-07-24',"%Y-%m-%d")), 
INTERVAL "23:59:59" HOUR_SECOND) or 
p.activity_start_time<date_add((date_format('2013-07-24',"%Y-%m-%d")), 
INTERVAL "00:00:00" HOUR_SECOND) 
and p.activity_end_time>date_add((date_format('2013-07-24',"%Y-%m-%d")), 
INTERVAL "23:59:59" HOUR_SECOND) or 
p.activity_start_time>=date_add((date_format('2013-07-24',"%Y-%m-%d")), 
INTERVAL "00:00:00" HOUR_SECOND) and 
p.activity_end_time<=date_add((date_format('2013-07-24',"%Y-%m-%d")), 
INTERVAL "23:59:59" HOUR_SECOND)) and 
(schedule.activity_start_time<date_add((date_format('2013-07-24',"%Y-%m-%d")), 
INTERVAL "00:00:00" HOUR_SECOND) and 
schedule.activity_end_time>date_add((date_format('2013-07-24',"%Y-%m-%d")), 
INTERVAL "23:59:59" HOUR_SECOND) or 
schedule.activity_start_time<date_add((date_format('2013-07-24',"%Y-%m-%d")), 
INTERVAL "00:00:00" HOUR_SECOND) and 
schedule.activity_end_time>date_add((date_format('2013-07-24',"%Y-%m-%d")), 
INTERVAL "23:59:59" HOUR_SECOND) or 
schedule.activity_start_time>=date_add((date_format('2013-07-24',"%Y-%m-%d")), 
INTERVAL "00:00:00" HOUR_SECOND) and 
schedule.activity_end_time<=date_add((date_format('2013-07-24',"%Y-%m-%d")), 
INTERVAL "23:59:59" HOUR_SECOND)) and 
e.arch_short_name = 'party.patientpet' and 
customer.arch_short_name = 'party.customerperson' 
and sd.name like CONCAT('GROOM','%') 
order by p.activity_start_time, sd.name, a.act_id 
+0

(은 MySQL의 구문에서 따라 달라질 수 있습니다)입니다. [SQL 결합의 시각적 설명] (http://www.codinghorror.com/blog/2007/10/a-visual-explanation-of-sql-joins.html)을 참조하십시오. – eggyal

답변

1

이 그것을

join contact_detail on (contact_detail.contact_id = contacts.contact_id and (contact_detail.lookup = 'mobile' or contact_detail.lookup = null)) 

을 시도하거나 당신은 외부 * 조인 * 사용하려는

join contact_detail on (contact_detail.contact_id = contacts.contact_id and (contact_detail.lookup = 'mobile' or contact_detail.lookup is null)) 
+0

마이클은 저에게 질문을 받도록 응원 해주었습니다. 마지막 변경은 (contact_detail.contact_id = contacts.contact_id 또는 contact_detail.contact_id = null) 및 (contact_detail.lookup = 'mobile'또는 contact_detail.lookup이 null)에 contact_detail을 추가하는 것이었지만 – Narrim

관련 문제