2012-06-20 7 views
1

사례 : contract.id = members.cid와 연결된 'contracts'및 'members'테이블이 2 개 있습니다. 각 계약에는 한 명의 주요 회원과 여러 명의 보조 회원 (대개 기본 회원의 자녀 및 배우자)이 있습니다. 주 구성원의 세부 정보 (이름, 주소 등)는 테이블 계약에 저장되는 반면 추가 구성원 세부 정보는 테이블 멤버에 보관됩니다. (나쁜 논리, 내가 알고 있지만 이것은 시작에 엉망이었고, 나는 DB 및 웹 사이트 재 설계하는 시간이 필요합니다)결합 된 행이 발생할 때 두 번째 테이블의 데이터를 인쇄하십시오.

을 원하는 출력 : 내가 말할 수 있습니다 (모든 계약의 일괄 인쇄를 실행할 때마다 금요일) 또한 각 회원에 대한 계약 사본을 인쇄해야하지만 주요 회원 대신 계약서의 세부 사항을 인쇄해야합니다.

질문 : 이것은 어떻게 mysql 쿼리로 변환됩니까? 좋아, 그 왼쪽 가입, 하지만 어떻게 "테이블 members에서 contracts에 대한"대신에 데이터를 인쇄합니까?

2 개의 테이블에 나타나는 주요 필드는 name + surname이며 초안 쿼리 예제에 충분해야합니다.

예 테이블 및 데이터 : 나는 단순히 이름과 NAME_1와 끝까지

SELECT c.name as name, c.surname as surname, m.name as name, m.surname as surname 
FROM contracts c 
join members m on c.id = m.cid 

를 작성하는 경우

cid | name | surname | 
-------------------------- 
1 | Tom | Jones | 
1 | Jack | Jones | 
1 | Anne | Jones | 
2 | Jamie | Oliver | 
2 | Cathy | Wilson | 

:

contracts 
------------------------- 
id | name | surname | 
------------------------- 
1 | Tom | Jones | 
2 | Jamie | Oliver | 

members 
-------------------------------- 
id | cid | name | surname | 
-------------------------------- 
1 | 1 | Jack | Jones | 
2 | 1 | Anne | Jones | 
3 | 2 | Cathy | Wilson | 

그래서 결과 내가 할 수 shoudld 원하는 , 성 및 surname_1하지만 모든 이름이 모든 다른 matc의 이름과 마찬가지로 떨어지길 바래요. hing columns.

+0

예제를 제공해주십시오 .. –

+0

@Sashi Kant : 예제가 추가되었습니다. – bikey77

+0

감사합니다, 내 업데이트 된 쿼리를 확인하십시오 –

답변

0

이 (필드 이름은 다르지만 구문이 중요한 것입니다) 나는 마침내했고,이 일 것입니다 :

SELECT u.id, u.onoma_u, u.name_u, 
     coalesce(u.programa, aa.programa) as programa, 
     coalesce(u.barcode, aa.barcode) as barcode, 
     coalesce(u.plan, aa.plan) as plan, 
     coalesce(u.im_exp, aa.im_exp) as im_exp, 
     coalesce(u.symb, aa.symb) as symb 
     FROM (SELECT a1.id, a1.onoma_u, a1.name_u, a1.programa, a1.barcode, a1.plan, a1.im_exp, a1.symb 
     FROM aitisi a1 
     UNION 
      SELECT a2.id, m.name, m.surname, NULL, NULL, NULL, NULL, NULL 
      FROM members m 
     JOIN aitisi a2 ON a2.id = m.symbid) u 
     JOIN aitisi aa ON aa.id = u.id; 

나는 별칭을 사용 공백을 채우기위한 더미 필드로 NULLS.

0

희망이 작동합니다 :::

select c1.id, c1.name, c1.surname 
from contracts c1 
union 
(Select m.id, m.name, m.surname 
    from 
members m left join contracts c on (c.id = m.cid)) 
+0

어쩌면 내 질문에 명확한 wasnt ... 조인 쿼리를 작성하는 방법을 알고 있지만 "조인 된 행에 대한 계약 대신 테이블 멤버에서 데이터 인쇄"말할 수 있습니까? – bikey77

+0

내 검색어가 변경되었습니다 ... –

+1

정확히 내가 필요한 것. 나는 노동 조합 성명서를 더 자세히 살펴보고, 꽤 강력 해 보인다. 고마워 친구. – bikey77

관련 문제