首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何调整JOIN子句,以便在结果中返回具有空值的列的行?

如何调整JOIN子句,以便在结果中返回具有空值的列的行?
EN

Stack Overflow用户
提问于 2013-05-09 01:40:14
回答 2查看 42关注 0票数 1

如何调整这个JOIN子句,以便在结果中返回CountLocId或CountNatId列为NULL值的行?

换句话说,如果local_ads表中没有匹配项,我仍然希望返回来自nat_ads表的用户结果,反之亦然。

代码语言:javascript
复制
SELECT u.franchise, CountLocId, TotalPrice, CountNatId, TotalNMoney, (
TotalPrice + TotalNMoney
)TotalRev
FROM users u
LEFT JOIN local_rev lr ON u.user_id = lr.user_id
LEFT JOIN (

SELECT lrr_id, COUNT( lad_id ) CountLocId, SUM( price ) TotalPrice
FROM local_ads
GROUP BY lrr_id
)la ON lr.lrr_id = la.lrr_id
LEFT JOIN nat_rev nr ON u.user_id = nr.user_id
INNER JOIN (

SELECT nrr_id, COUNT( nad_id ) CountNatId, SUM( tmoney ) TotalNMoney
FROM nat_ads
WHERE MONTH =  'April'
GROUP BY nrr_id
)na ON nr.nrr_id = na.nrr_id
WHERE lr.month =  'April'
AND franchise !=  'Corporate'
ORDER BY franchise

提前感谢您的帮助!

EN

回答 2

Stack Overflow用户

发布于 2013-05-09 01:44:03

在进行左连接时,在where子句中尝试执行以下操作。这将获取右表中具有匹配条件的所有行

例如:

代码语言:javascript
复制
LEFT JOIN local_rev lr ON (u.user_id = lr.user_id) or (u.user_id IS NULL)
票数 1
EN

Stack Overflow用户

发布于 2013-05-09 01:45:33

使用此模板,因为它可确保:

由于每个用户表只有一条记录(请注意,所有子查询都有一个GROUP BY

  • ),因此对于user表上的一条记录,您在user_id joins (和已计算数据)上只有一条(或无)记录不会在

中混在一起

-

代码语言:javascript
复制
SELECT u.franchise, one.CountLocId, one.TotalPrice, two.CountNatId, two.TotalNMoney, (COALESCE(one.TotalPrice,0) + COALESCE(two.TotalNMoney,0)) TotalRev
FROM users u

LEFT JOIN (
    SELECT x.user_id, sum(xORy.whatever) as TotalPrice, count(xORy.whatever) as CountLocId
    FROM   x                             -- where   x is  local_rev or local_ads   I dont know
    LEFT JOIN  y  on x.... = y....       -- where   y is  local_rev or local_ads   I dont know
    GROUP BY  x.user_id
) as one   on u.user_id  = one.user_id

LEFT JOIN (
    SELECT x.user_id, sum(xORy.whatever) as TotalNMoney, count(xORy.whatever) as CountNatId
    FROM   x                             -- where   x is  nat_rev or nat_ads   I dont know
    LEFT JOIN  y  on x.... = y....       -- where   y is  nat_rev or nat_ads   I dont know
    GROUP BY  x.user_id
) as two   on u.user_id  = two.user_id
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16446929

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档