连接mysql上的两个表

连接mysql上的两个表,mysql,sql,inner-join,Mysql,Sql,Inner Join,我有两张桌子 下面的第一个表包括按特定号码按小时计算的已拨电话数 +-------------+---------------+-------+ | Card_no | Dialled_Count | Hour | +-------------+---------------+-------+ | 9913528756 | 9 | 10 | | 9913528756 | 2 | 11 | | 9913528756 |

我有两张桌子

下面的第一个表包括按特定号码按小时计算的已拨电话数

+-------------+---------------+-------+
| 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          |
+-------------+---------------+-------+--------------+
任何帮助都将不胜感激

先谢谢你

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,我想您可能需要使用一个更简单的方法

类似

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

这应该是可行的,如果他想得到“0”而不是NULL,他可以简单地使用CASE-WHEN语句来切换them@jtravaglini在发布此问题之前,我已经尝试过了。但它给出了执行呼叫和消息时的小时结果,即,它给出了10小时的结果only@pulchowkian我的错误,你说得对-完全外部联接(union)方法最适合于you@pulchowkian上述解决方案应该有效,这不是您要找的吗?@astander如前所述,有一个人在10小时内发送了10条消息并拨打了9个电话。因为10小时在两个表中都很常见。我希望结果在同一行,即9913528756 | 9(call)| 10(小时)| 10(Mssg)。但您的查询在单独的查询中给出的结果是9913528756 | 9(呼叫)| 10(小时)| 0(Mssg)和9913528756 | 0(呼叫)| 10(小时)| 10(Mssg)rows@astander谢谢编辑的查询终于满足了我的要求这是一个外部连接而不是内部连接。