[英]SQL Query - select all from one table with matching records in another
[英]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.