sql – 缺少具有左连接和count()的行所需的解释
发布时间:2020-12-12 06:41:00 所属栏目:MsSql教程 来源:网络整理
导读:有人可以帮助我理解当我向具有COUNT(*)LEFT JOIN的查询添加WHERE子句时发生的以下行为吗? 我有两张桌子: TABLE 1: customerscustomer_id | name------------------1 | Bob2 | James3 | FredTABLE 2: ordersorder_id | customer_id | order_timestamp-------
有人可以帮助我理解当我向具有COUNT(*)LEFT JOIN的查询添加WHERE子句时发生的以下行为吗?
我有两张桌子: TABLE 1: customers customer_id | name ------------------ 1 | Bob 2 | James 3 | Fred TABLE 2: orders order_id | customer_id | order_timestamp ---------------------------------------- 1000 | 1 | 2011-01-01 00:00 1001 | 1 | 2011-01-05 00:00 1002 | 2 | 2011-01-10 00:00 现在,以下查询告诉我每个客户下了多少订单: select c.customer_id,count(o.order_id) from customers c left join orders o using (customer_id) group by 1 customer_id | count ------------------- 1 | 2 2 | 1 3 | 0 这很好但是如果我向查询添加一个WHERE子句,查询不再为没有下任何订单的客户输出零数,即使我正在进行LEFT JOIN: select c.customer_id,count(o.order_id) from customers c left join orders o using (customer_id) where o.order_timestamp >= '2011-01-05' group by 1 customer_id | count ------------------- 1 | 1 2 | 1 现在,如果我将WHERE条件作为LEFT JOIN的一部分移动,如下所示,我会为没有下订单的客户取回零点数: select c.customer_id,count(o.order_id) from customers c left join orders o on (c.customer_id = o.customer_id) and (o.order_timestamp >= '2011-01-05') group by 1 我很困惑为什么第二个查询不起作用,但第三个查询不起作用?有人可以请我解释一下吗?也不确定这是否重要,但我正在使用postgres.谢谢! 解决方法这是因为NULL不大于或等于任何东西;如果将WHERE子句更改为o.order_timestamp为null或o.order_timestamp> =’2011-01-05′,那么您将获得与join子句限制相同的行为.请注意 – 我会建议使用join子句方法,因为它与您尝试的方法更紧密地匹配.另外,我在上面提到的WHERE子句的更改只有在order_timestamp列不可为空时才有效 – 如果是,那么你应该使用不同的列进行空检查(例如,o.primarykey为null或o.order_timestamp> ; =’2011-01-05′). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- SQLSERVER 多表查询使用/显示多列数据
- asp.net实现将Excel中多个sheet数据导入到SQLSERVER中的方法
- SQL Server 整理一下的排序规则
- win2008 enterprise R2 x64 中安装SQL server 2008的方法
- 向SQLServer数据库添加图片和文字
- SQLSERVER2008 18456错误
- sql – COUNT(*)何时返回NULL?
- sql-server-2008 – 我可以将SQL Server 2008 R2备份还原到
- SQLserver2005中的DATENAME函数
- sql-server – 为什么在SQL Server 2012中设置空结果的查询
推荐文章
站长推荐
热点阅读