2011-04-08 107 views
0

在我的SQL查詢from子句中有一個表(表1)我注意到如果這個表爲空,我的整個查詢結果爲null.Also如果我不在這裏使用這個表和select子句。 這是什麼原因,以及如何防止這種情況。我們可以在From子句中添加一個空表

從 productsale PS

選擇ps.ProductName,StockTransfer DTC
其中
ps.productcode = '010134600223'
和ps.productcode =

(case when ps.productcode=dtc.productcode then 

dtc.productcode別的ps.productcode end)

如果我不在表單子句中添加StockTransfer表(如果StockTransfer表爲空),則此查詢正常工作,否則它可以正常工作。

+0

請發表一個示例! – user492238 2011-04-08 07:04:11

回答

1

你做了一個交叉連接。這意味着對於Table1中的每一行,您都將獲得Table2中的所有行。因此,如果Table1有4行,而Table2有2行,則結果集中會有8行(4 * 2 = 8)。如果Table2包含0行,您將在結果集中獲得0行(4 * 0 = 0)。

要解決此問題,您需要添加連接條件。

+0

爲什麼我需要一個join.As我不是從table1.that中選擇。這是空的。 – 2011-04-08 08:15:00

+0

@Zain,你*從* table1和table2中選擇。 'select *'意味着你想要包含表中的所有列,並且將table1添加到'from'子句意味着你想在查詢中使用table1。如果你不需要它,你需要刪除它。 – 2011-04-08 09:14:19

+0

好的,我編輯了我的問題。解釋 – 2011-04-08 09:30:42

2

取決於您是如何加入的。

如果你

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

和表B爲空,則可能會導致什麼作爲沒有過。

左或右連接取決於哪個是空表,工作正是如此。

左連接將返回從匹配第二個表中的第一個表中的所有數據和任何數據,因此

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

將返回總之,一切只是TableA的數據,因爲這就是所有有(但任何你需要從tableb中獲得額外的字段,但顯然沒有數據,因爲沒有數據)

相關問題