栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Postgres中的左外联接不返回Null值

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Postgres中的左外联接不返回Null值

我之所以给出答案,是因为我对其他答案有很大的疑问。您必须注意过滤器的要求。请记住,where子句 在您加入join之后运行 。因此,如果
where子句
中有任何过滤条件要求引用非外部联接表,则您(在许多情况下)将使外部联接无效。因此,以您的sql为例,似乎最简单的解决方案是使用适当的联接或适当地移动表名称,然后将过滤条件从where子句移至join子句。

SELECt  f.faultpre, f.downloadtimeid, d.downloadtime, count(*) as faultcount FROM    download_time d RIGHT OUTER JOIN fs_fault f ON     f.downloadtimeid = d.id    AND f.faultpre IN (1000,1100)    AND f.statusid IN(2, 4)    AND d.downloadtime BETWEEN '04/11/2011' AND '05/01/2012')    AND d.bunoid = 166501GROUP BY d.bunoid, f.downloadtimeid, d.downloadtime, f.faultpre

我认为应该等效的另一种方式是

SELECt  f.faultpre, f.downloadtimeid, d.downloadtime, count(*) as faultcount FROM    download_time d RIGHT OUTER JOIN fs_fault f ON     f.downloadtimeid = d.id    AND d.downloadtime BETWEEN '04/11/2011' AND '05/01/2012')    AND d.bunoid = 166501WHERe    f.faultpre IN (1000,1100)    AND f.statusid IN(2, 4)GROUP BY d.bunoid, f.downloadtimeid, d.downloadtime, f.faultpre

因为对fs_fault的过滤器要求在哪里并不严格。(并且您的SQL引擎将完全改变它)。

编辑:这是一个SQLFiddle演示对join子句和where子句的过滤。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/614379.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号