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 сообщений и набрал 9 звонков в час. 10. Час 10 распространен в обеих таблицах. Мне нужен результат в той же строке i.e 9913528756 | 9 (звонок) | 10 (час) | 10 (Mssg). Но ваш запрос дал результат как 9913528756 | 9 (звонок) | 10 (час) | 0 (Mssg) и 9913528756 | 0 (звонок) | 10 (час) | 10 (Mssg) в отдельных строках – 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 

Это должно но вы получите NULL, а не 0s

+1

Это должно сработать, и если он хочет получить «0» вместо NULL, он может просто использовать оператор CASE WHEN для их переключения – NDraskovic

+0

@jtravaglini, который я уже пробовал, прежде чем публиковать этот вопрос. Но он дает мне результат Часа, когда оба вызов и сообщение было выполнено, то есть это дало мне результат только Часа 10 – stackoverflowuser

+0

@pulchowkian моя ошибка, вы правы - полный внешний союз (союз) будет работать лучше всего для вас – jtravaglini

Смежные вопросы