连接两个表以获取MySql中用户的总访问次数

连接两个表以获取MySql中用户的总访问次数,mysql,Mysql,在我的MySql中有两个表:tblN1和tblN2 表tblN1是一个旧表,其中存储了网站限制区域内的帐户访问权限 表TBLN2是一个新表,其中存储了网站限制区域内的帐户访问权限 如果在tblN1上尝试此查询: 此查询的返回值为4 如果在tblN2上尝试此查询: 此查询的返回值为0 我正在尝试联接两个表以获取用户的总访问次数 mysql> SELECT ( COUNT(DISTINCT A.ID) + COUNT(DISTINCT CA.ID) ) AS S

在我的MySql中有两个表:tblN1和tblN2

表tblN1是一个旧表,其中存储了网站限制区域内的帐户访问权限

表TBLN2是一个新表,其中存储了网站限制区域内的帐户访问权限

如果在tblN1上尝试此查询:

此查询的返回值为4

如果在tblN2上尝试此查询:

此查询的返回值为0

我正在尝试联接两个表以获取用户的总访问次数

mysql> SELECT
    (
        COUNT(DISTINCT A.ID) + COUNT(DISTINCT CA.ID)
    ) AS SuperTotal,
    COUNT(DISTINCT A.ID) AS TotalN1,
    COUNT(DISTINCT CA.ID) AS TotalN2,
    UserN1 AS UserN1,
    UserN2  AS UserN2
FROM
    `tblN1` A
JOIN `tblN2` CA ON A.UserN1 = CA.UserN2
WHERE
    CA.UserN2 IN ('7047505')
AND (
    dateN1 BETWEEN MAKEDATE(YEAR(CURDATE()), 1)
    AND CURDATE()
    AND `dateN2` BETWEEN MAKEDATE(YEAR(CURDATE()), 1)
    AND CURDATE()
);
+------------+---------+---------+--------+--------+
| SuperTotal | TotalN1 | TotalN2 | UserN1 | UserN2 |
+------------+---------+---------+--------+--------+
|          0 |       0 |       0 | NULL   | NULL   |
+------------+---------+---------+--------+--------+
1 row in set
所有字段的返回值都是0,为什么

请帮帮我,先谢谢你

编辑1


联接导致返回0。从您的示例中可以明显看出,给定用户没有任何满足第二个表中where条件的记录。当您在用户id上的第二个表上联接第一个表时,第二个表不会返回任何结果,因此联接会从第一个表中删除相应的记录

更新:

不使用join,只需将两个查询与子查询中的union组合,并将它们添加到外部查询中即可:

SELECT sum(total) as Total FROM
    (SELECT COUNT(*) AS Total
    FROM `tblN1`
    WHERE UserN1 IN ('7047505')
          AND dateN1 BETWEEN MAKEDATE(YEAR(CURDATE()), 1) AND CURDATE()
    UNION ALL
    SELECT COUNT(*)
    FROM `tblN2`
    WHERE UserN2 IN ('7047505')
          AND dateN2 BETWEEN MAKEDATE(YEAR(CURDATE()), 1) AND CURDATE()
    ) AS t

请尝试在A.UserN1=CA.UserN2上选择*FROM tblN1 A JOIN tblN2 CA以检查连接是否正确如果连接正确,则需要检查WHERE子句,因此现在尝试在A.UserN1=CA.UserN2上选择*FROM tblN1 A JOIN tblN2 CA,其中CA.UserN2位于“7047505”中,dateN1位于MAKEDATEYEARCURDATE之间,1和CURDATE以及MAKEDATEYEARCURDATE和CURDATE之间的日期2谢谢,我已经尝试了您的查询,但是返回值为0,因为在任何表中都没有满足where条件的记录。是的,我在tblN1上有dateN1列,在TBLN2上有dateN2列。总计的返回值为0。请参阅我在第一个问题中的编辑1,谢谢。在这种情况下,联合内的两个查询都返回0。由于我复制粘贴了您的问题查询,只是重新格式化了它们,所以您必须自己检查这些问题。
mysql> SELECT
    (
        COUNT(DISTINCT A.ID) + COUNT(DISTINCT CA.ID)
    ) AS SuperTotal,
    COUNT(DISTINCT A.ID) AS TotalN1,
    COUNT(DISTINCT CA.ID) AS TotalN2,
    UserN1 AS UserN1,
    UserN2  AS UserN2
FROM
    `tblN1` A
JOIN `tblN2` CA ON A.UserN1 = CA.UserN2
WHERE
    CA.UserN2 IN ('7047505')
AND (
    dateN1 BETWEEN MAKEDATE(YEAR(CURDATE()), 1)
    AND CURDATE()
    AND `dateN2` BETWEEN MAKEDATE(YEAR(CURDATE()), 1)
    AND CURDATE()
);
+------------+---------+---------+--------+--------+
| SuperTotal | TotalN1 | TotalN2 | UserN1 | UserN2 |
+------------+---------+---------+--------+--------+
|          0 |       0 |       0 | NULL   | NULL   |
+------------+---------+---------+--------+--------+
1 row in set
mysql> SELECT sum(total) as Total FROM
    (SELECT COUNT(*) AS Total
    FROM `tblN1`
    WHERE UserN1 IN ('7047505')
          AND dateN1 BETWEEN MAKEDATE(YEAR(CURDATE()), 1) AND CURDATE()
    UNION ALL
    SELECT COUNT(*)
    FROM `tblN2`
    WHERE UserN2 IN ('7047505')
          AND dateN2 BETWEEN MAKEDATE(YEAR(CURDATE()), 1) AND CURDATE()
    ) AS t;


+-------+
| Total |
+-------+
| 0     |
+-------+
1 row in set
SELECT sum(total) as Total FROM
    (SELECT COUNT(*) AS Total
    FROM `tblN1`
    WHERE UserN1 IN ('7047505')
          AND dateN1 BETWEEN MAKEDATE(YEAR(CURDATE()), 1) AND CURDATE()
    UNION ALL
    SELECT COUNT(*)
    FROM `tblN2`
    WHERE UserN2 IN ('7047505')
          AND dateN2 BETWEEN MAKEDATE(YEAR(CURDATE()), 1) AND CURDATE()
    ) AS t