簡體   English   中英

顯示一個表中的所有記錄,並顯示另一個表中的匹配記錄

[英]displaying all records from one table and matching records from another

嗨,我在下面的表格中記錄了活動和積分

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

SELECT a.ActivityName,SUM( p.RemainderPoints) FROM activity a left join pointstable p on a.ActivityName =p.ActivityName WHERE p.UserID =2 AND p.Active = 'TRUE' and a.site ='Site1' GROUP BY a.ActivityName

希望這可以幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM