我们可以在From子句中添加一个空表

时间:2011-04-08 06:59:22

标签: sql-server-2005 tsql

在我的SQL查询from子句中有一个表(表1)我注意到如果此表为空,我的整个查询结果为null。如果我不在where和select子句中使用此表。 这背后的原因是什么以及如何防止这种情况。

  

从中选择ps.ProductName   productsale ps,StockTransfer dtc
       其中
        ps.productcode ='010134600223'
        和ps.productcode =

  (case when  ps.productcode=dtc.productcode then
     

dtc.productcode否则ps.productcode   端)

如果我没有在表单子句中添加StockTransfer表(如果StockTransfer表为空),则此查询正常工作,否则它可以正常工作。

2 个答案:

答案 0 :(得分:2)

取决于您的加入方式。

如果你这样做

select * from tablea join tableb on tablea.id=tableb.id 

并且tableb为空,然后没有任何结果,因为没有任何东西。

左边或右边连接取决于哪个是空表,正是这样做。

左连接将返回第一个表中的所有数据以及第二个表中匹配的所有数据

select * from tablea left join tableb on tablea.id=tableb.id

会简单地返回,除了只是tablea数据之外的所有数据,因为那就是所有(但是你从tableb请求的任何其他字段,但显然没有数据,因为没有)

答案 1 :(得分:1)

您进行交叉加入。这意味着对于Table1中的每一行,您将获得Table2中的所有行。因此,如果Table1有4行而Table2有2行,那么结果集中将得到8行(4 * 2 = 8)。如果Table2包含0行,则结果集中将获得0行(4 * 0 = 0)。

要解决此问题,您需要添加连接条件。