加入两个表并得到结果

Posted

技术标签:

【中文标题】加入两个表并得到结果【英文标题】:Joined two tables & get results 【发布时间】:2015-09-05 12:11:28 【问题描述】:

我在加入两个 mysql 表并获得我想要的结果时遇到了一些麻烦。

我有两个表,用户表和时间表。用户表有 id & name 。时间表有 user_id 和 minutesSpent。我想以名称和时间列作为结果集的所有用户的时间。但是对于某些特定日期,所有用户 ID 都不在时间表中。因此,对于此类用户,我需要 null 值。

我尝试了几个查询,但每次我只获得时间表中可用的 user_ids 的时间。没有将其他 user_id 的时间设为 null :(

SELECT `users`.`name`,SUM(`times`.`minutesSpent`) AS `Total` 
FROM `users` 
LEFT OUTER JOIN `times`  ON `users`.`id` = `times`.`user_id`   
WHERE DATE(`date`) = '2015-06-03' 
GROUP BY `users`.`name`

&我也试过这个查询

SELECT `users`.`name`,SUM(`times`.`minutesSpent`) AS `Total` ,CASE WHEN times.user_id IS NULL THEN 0 ELSE 1 END 
FROM `users` 
INNER  JOIN `times`  ON `users`.`id` = `times`.`user_id` AND `users`.`isTimeEnable` = 0   
WHERE DATE(`date`) = '2015-06-03' 
GROUP BY `users`.`name`

如果有人帮我解决这个问题,那就太好了。 谢谢

【问题讨论】:

【参考方案1】:

您的 WHERE 子句正在将您的左连接变为内连接。试试这个:

   SELECT `users`.`name`,SUM(`times`.`minutesSpent`) AS `Total` 
    FROM `users` 
    LEFT OUTER JOIN `times`  ON `users`.`id` = `times`.`user_id`   
      AND DATE(`date`) = '2015-06-03' 
    GROUP BY `users`.`name`

【讨论】:

【参考方案2】:

顺便说一句,如果您需要更少的打字(20 个字符)和更好的性能,那么请考虑以下几点:

SELECT u.name
     , SUM(t.minutesSpent) Total 
  FROM users u 
  LEFT 
  JOIN times t
    ON u.id = t.user_id   
   AND t.date BETWEEN '2015-06-03 00:00:00' AND '2015-06-03 23:59:59' 
 GROUP 
    BY u.name;

【讨论】:

以上是关于加入两个表并得到结果的主要内容,如果未能解决你的问题,请参考以下文章

mysql查询加入,比较两个表并返回第一个表中的所有记录

MySQL:加入表并根据另一列上的聚合函数从一行返回一列[重复]

如何通过聚合连接mongoDB中的两个表并需要根据匹配获取结果[重复]

如何连接两个 XML 表并嵌套而不重复

如何连接两个表并选择不匹配的列

加入多个表并应用聚合给出错误的结果