MySQL,在执行 SELECT DISTINCT 查询之前合并 2 个或更多表?

标签 mysql distinct

我想计算 2 个(或可能更多个表)中有多少唯一登录。

我试过这个:

SELECT count(distinct(l1.user_id)) 
FROM `log_1` l1 
LEFT JOIN `log_2` l2 
ON l1.userid = l2.userid;

但它给了我 l1 的结果。如果我没有将 l1 放在 li.userid (distinct) 上,它会说“模棱两可”。

如何组合表,然后选择组合表的唯一登录?

编辑:

已测试:我测试了 count(distinct(l1.userid)) 和 count(distinct(l2.userid))。它给了我不同的结果

最佳答案

如果您正在使用 LEFT JOIN,那么对于 l1 中的每一行,您将在组合结果中至少得到一行,因此如果您只想要一个不同的计数,则完全不需要连接。这将为您提供与查询相同的结果:

SELECT count(distinct(l1.user_id)) 
FROM `log_1` l1 

也许您需要 INNER JOINUNION?如果用户出现在任一表中,UNION 将计入一个用户。 INNER JOIN 仅当它们同时出现在两个表中时才会对它们进行计数。以下是 UNION 的示例:

SELECT count(*) FROM (
    SELECT distinct(user_id) FROM `log_1`
    UNION
    SELECT distinct(user_id) FROM `log_2`
) T1

关于MySQL,在执行 SELECT DISTINCT 查询之前合并 2 个或更多表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2498669/

相关文章:

Mysql 多个不同的不起作用

mysql - 如何从 express-openapi mysql.query() 调用获取 JSON 输出?

java - 从两个数据库表获取结果并在 Java 中设置它和另一个 Jframe?

mysql - 连接 phpmyadmin mysql 的工具

mysql - 错误 1044 用户 '' @'localhost' 访问数据库被拒绝

mysql - sql : Counting growth over time

c# - 区别()不起作用

php - 使用 for 循环从 MySQL 查询中增量选择值

MySQL SELECT DISTINCT 如何连接一些相应的列来查询结果

mysql - 按顺序计数