2013-08-15 4 views
2

두 테이블이 있습니다. 아래 표현mysql에 두 테이블 조인

첫 번째 테이블 특정 번호

+-------------+---------------+-------+ 
| Card_no  | Dialled_Count | Hour | 
+-------------+---------------+-------+ 
| 9913528756 | 9   | 10 | 
| 9913528756 | 2   | 11 | 
| 9913528756 | 10   | 23 | 
+-------------+---------------+-------+ 

의해 현명한 발신 통화 시간의 카운트를 포함하고 다른 테이블은 메시지 전송 hourwise의 개수를 나타낸다.

+-------------+---------------+-------+ 
| Card_no  | Message_Count | Hour | 
+-------------+---------------+-------+ 
| 9913528756 | 5   | 6 | 
| 9913528756 | 10   | 10 | 
| 9913528756 | 12   | 17 | 
+-------------+---------------+-------+ 

나뿐만 예상되는 최종 결과 이러한 테이블을 조인 할 :

상관 사전에

감사합니다 감사합니다 도움이

+-------------+---------------+-------+--------------+ 
| Card_no  | Dialled_Count | Hour | Message_count| 
+-------------+---------------+-------+--------------+ 
| 9913528756 | 0   | 6 | 5   | 
| 9913528756 | 9   | 10 | 10   | 
| 9913528756 | 2   | 11 | 0   | 
| 9913528756 | 0   | 17 | 12   | 
| 9913528756 | 10   | 23 | 0   | 
+-------------+---------------+-------+--------------+ 

...

+0

이처럼 뭔가 쿼리를 변경합니다. – jtravaglini

답변

2

오히려 UNION ALL을 사용하는 것이 좋습니다.

Somethign 영업 질문에 대한 응답으로

Select Card_No, Dialled_Count, hour, 0 as Message_Count from tblCall 
union all 
Select Card_No, 0 as Dialled_Count, hour, Message_Count from tblMessage 

처럼, 나는 외부가 내부 조인되지 가입

SELECT dl.Card_no, 
     dl.Hour, 
     IFNULL(c.Dialled_Count,0) Dialled_Count , 
     IFNULL(m.Message_count,0) Message_count 
FROM (
      SELECT DISTINCT 
        Card_no, 
        Hour 
      FROM tblCall 
      UNION 
      SELECT DISTINCT 
        Card_no, 
        Hour 
      FROM tblMessage 
     ) dl LEFT JOIN 
     tblCall c ON dl.Card_no = c.Card_no 
        AND dl.Hour = c.Hour LEFT JOIN 
     tblMessage m ON dl.Card_no = m.Card_no 
         AND dl.Hour = m.Hour 
+0

@pulchowkian 위의 솔루션이 작동해야합니다. 당신이 찾고있는? – Renu

+0

@astander 질문에 언급 된대로 10 개의 메시지를 보내고 10 시간 안에 9 개의 전화를 건 사람이 있습니다. 10 시부 터는 두 테이블 모두에서 공통적입니다. 결과가 같은 행, 즉 9913528756 | 9 (전화) | 10 (시간) | 10 (Mssg). 하지만 귀하의 쿼리 결과는 9913528756 | 9 (전화) | 10 (시간) | 0 (Mssg) 및 9913528756 | 0 (전화) | 10 (시간) | 10 (Mssg) in separate rows – stackoverflowuser

+0

@astander 편집 된 쿼리가 마침내 충족되었습니다. – stackoverflowuser

1
SELECT * FROM a LEFT JOIN b ON a.Card_no = b.Card_no 
    UNION 
    SELECT * FROM a RIGHT JOIN b ON a.Card_no = b.Card_no 

이해야 작동하지만 0이 아닌 NULL을 가져옵니다.

+1

이것은 작동해야하고, 만약 그가 NULL 대신에 '0'을 얻고 싶다면 그는 간단히 CASE WHEN 문을 사용하여 – NDraskovic

+0

@jtravaglini로 바꿀 수 있습니다.이 질문을 게시하기 전에 이미 시도했습니다. 호출 및 메시지가 수행되었습니다. 즉, 시간 10의 결과 만 제공합니다. – stackoverflowuser

+0

@pulchowkian 제 실수입니다. 완벽한 외부 조인 (통합) 방식이 가장 효과적 일 것입니다. – jtravaglini