Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 试图理解查询中的NULL运算符_Sql_Sql Server - Fatal编程技术网

Sql 试图理解查询中的NULL运算符

Sql 试图理解查询中的NULL运算符,sql,sql-server,Sql,Sql Server,我希望看到每个供应商(间接通过分销商)与每个客户所做的总金额业务的细分,我尽量不使用内部联接语法。我基本上不理解以下两个查询产生的两个输出之间的差异: 问题1 select customers.cust_id, vendors.vend_id, sum(OrderItems.item_price*OrderItems.quantity) as total_business from (((Vendors left outer join products on vendors.vend_id =

我希望看到每个供应商(间接通过分销商)与每个客户所做的总金额业务的细分,我尽量不使用
内部联接
语法。我基本上不理解以下两个查询产生的两个输出之间的差异:

问题1

select customers.cust_id, vendors.vend_id, sum(OrderItems.item_price*OrderItems.quantity) as  total_business from
(((Vendors left outer join products
on vendors.vend_id = products.prod_id)
left outer join OrderItems
on products.prod_id = OrderItems.prod_id)
left outer join Orders
on OrderItems.order_num = Orders.order_num)
left outer join Customers
on Orders.cust_id = Customers.cust_id
group by Customers.cust_id, vendors.vend_id
order by total_business
我得到以下输出:

问题2

select customers.cust_id, Vendors.vend_id, sum(quantity*item_price) as total_business from
(((Vendors left outer join Products 
on Products.vend_id = Vendors.vend_id)
left outer join OrderItems --No inner joins allowed
on OrderItems.prod_id = Products.prod_id)
left outer join Orders 
on Orders.order_num = OrderItems.order_num)
left outer join Customers 
on Customers.cust_id = Orders.cust_id
where Customers.cust_id is not null -- THE ONLY DIFFERENCE BETWEEN QUERY1 AND QUERY2
group by Customers.cust_id, Vendors.vend_id
order by total_business

我不明白为什么只有
NULL
cust\u id
与第一个输出关联,而在第二个输出中,我们得到了一些非NULL的
cust\u id
s。为什么第一个输出不包括这些非空的
cust\u id


谢谢

当您将联接保留到表中,然后在where子句中对该表进行筛选时,联接实际上会更改为内部联接。解决方法是将过滤器作为连接条件应用


在第二个查询中,您所要做的就是将单词“where”改为“and”。

查询一个供应商和产品加入错误:

on vendors.vend\u id=products.prod\u id--vend\u id=prod\u id

查询2是否正确加入供应商和产品:

on Products.vend\u id=Vendors.vend\u id--vend\u id=vend\u id

一旦解决了这个问题,您将在两个查询中获得相同的ID。然后,我建议您阅读Dan的回答,以理解为什么您试图通过向链中最后一个表的列添加
WHERE
过滤器来取消查询中的
内部联接