在mysql上加入两个表

时间:2013-08-15 17:06:27

标签: mysql sql inner-join

我有两张桌子。

下面显示的第一个表格包括按小时划分的拨打电话的计数

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

另一个表表示每小时发送的消息计数。

+-------------+---------------+-------+
| 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          |
+-------------+---------------+-------+--------------+

感谢任何帮助

提前致谢...

2 个答案:

答案 0 :(得分:2)

我想你可能想要使用UNION ALL而不是。

这样的东西
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

在回答OP问题时,我会将查询更改为

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

答案 1 :(得分: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而不是0