连接两个表以获取MySql中用户的总访问次数
在我的MySql中有两个表:tblN1和tblN2 表tblN1是一个旧表,其中存储了网站限制区域内的帐户访问权限 表TBLN2是一个新表,其中存储了网站限制区域内的帐户访问权限 如果在tblN1上尝试此查询: 此查询的返回值为4 如果在tblN2上尝试此查询: 此查询的返回值为0 我正在尝试联接两个表以获取用户的总访问次数连接两个表以获取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> 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