【问题标题】:MySQL, merging 2 or more tables before execute SELECT DISTINCT query?MySQL,在执行 SELECT DISTINCT 查询之前合并 2 个或更多表?
【发布时间】:2010-03-23 09:20:31
【问题描述】:

我想计算来自 2 个(或可能更多表)的唯一登录数。

我试过这个:

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

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

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

编辑:

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

【问题讨论】:

  • 你能定义一下你所说的“组合表格”是什么意思吗?您想要出现在任一表中的用户吗?出现在两个表中的用户?还有什么?
  • @Mark Byers:我认为如果用户出现在两个表上会更准确吗?合并4张桌子真的需要很长时间,2分钟多,我现在还在等待。 (使用我上面的代码,将 LEFT JOIN 更改为 INNER JOIN)

标签: mysql distinct


【解决方案1】:

如果您使用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

【讨论】:

    猜你喜欢
    • 2014-05-01
    • 2010-11-10
    • 2014-03-04
    • 1970-01-01
    • 2021-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-05
    相关资源
    最近更新 更多