mysql - 显示一个表中的所有记录以及另一表中的匹配记录

标签 mysql sql

您好,我在下面有一个表格,其中包含事件和积分的记录

Activites
|A_ID   |Site        | ActivityValue| ActivityName
 ---------------------------------------------------
|1      | site1      | 7             | ActivityName1
|2      | site1      | 6             | ActivityName2
|2      | site1      | 6             | ActivityName3
|2      | site1      | 6             | ActivityName4  



pointsTable
|UserID |RemainderPoints  | Active         | ActivityName |
------------------------------------------------------
|1      | 10              | TRUE           | ActivityName1| 
|2      | 5               | TRUE           | ActivityName2| 
|2      | 5               | TRUE           | ActivityName3| 
|2      | 5               | TRUE           | ActivityName3|  

我需要的是返回事件的所有记录

SELECT  ActivityName FROM activity WHERE `Site`='Site1' 

返回

ActivityName1
ActivityName2
ActivityName3
ActivityName4    

然后我需要根据积分表中的用户 ID 计算用户积分

SELECT UserID, ActivityName, Active,  SUM( RemainderPoints) 
FROM pointstable
WHERE UserID =2
AND Active =  'TRUE'  GROUP BY ActivityName    

返回

|UserID |RemainderPoints   | Active         | ActivityName |
-------------------------------------------------------------
|2      | 5                | TRUE           | ActivityName2| 
|2      | 10               | TRUE           | ActivityName3|    

所有这些分开都很好,但我需要它们为用户组合在一起,即

ActivityName1  = 0
ActivityName2  = 5
ActivityName3  =10
ActivityName4  = 0

有什么指点吗?

最佳答案

使用外部联接:

select 
    a.activityName, 
    coalesce(sum(pt.remainderPoints), 0) points
from 
    activities a left outer join pointsTable pt on 
        pt.activityName = a.activityName and pt.UserID = 2
group by a.activityName

或子查询:

select
    activities.ActivityName,
    coalesce(
        (select sum(RemainderPoints) from pointsTable where pointsTable.UserId = 2 and pointsTable.ActivityName = activities.ActivityName)
    , 0) points
from
    activities

关于mysql - 显示一个表中的所有记录以及另一表中的匹配记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19730008/

相关文章:

mysql - 添加到mysql表行

mysql - 奇怪的mysql查询返回值

sql - 如果值为null则Postgresql忽略过滤条件

sql - 首先选择一行,然后选择第二行

sql - 在删除之前检查 SQL 中的完整性约束冲突

mysql - 使用 maria DB、JPA 和 Spring Boot 1.5.4 基于架构的 Multi-Tenancy

java - 在 javaFx 中将 Integer tableview 显示为字符串

php - DELETE FROM 不起作用(mysql)

sql - 插入语句在函数内部不起作用(PostgreSQL)

php - Mysql使用单个查询更新选定的行