2016-05-30 65 views
0

我從數據庫中的兩個不同表中提取值。我應該只有一行輸出,但是我得到兩行。輸出行之一是完美的,但另一行有一個空值,顯然不應該爲空。我的代碼如下:當數據庫中存在值時,輸出中顯示SQL-null值

SELECT DISTINCT DEATH_RATE.COUNTRY_NAME, 
       DEATH_RATE.DATA_YEAR, 
       DEATH_RATE.DEATH_RATE_VALUE, 
       TIME_TO_EXPORT.EXPORT_VALUE 
FROM DEATH_RATE, TIME_TO_EXPORT 
WHERE TIME_TO_EXPORT.COUNTRY_NAME IN ('Belgium') 
AND TIME_TO_EXPORT.COUNTRY_NAME = DEATH_RATE.COUNTRY_NAME 
AND DEATH_RATE.DATA_YEAR = 2012 
AND DEATH_RATE.DATA_YEAR = DEATH_RATE.DATA_YEAR ; 

我得到的輸出如下:

COUNTRY_NAME DATA_YEAR DEATH_RATE EXPORT_VALUE 
1.Belgium   2012   423.5  9 
2.Belgium   2012   423.5  null 

第一行是很好,只是本來應該輸出。第二行和null來自哪裏?

感謝

+2

在您的where子句中只需添加'AND TIME_TO_EXPORT.EXPORT_VALUE不爲空' –

+0

您可以嘗試通過加入這些表來提取值。 –

+0

因爲您的TIME_TO_EXPORT表與國家/地區名稱比利時EXPORT_VALUE爲nul.thats wwhy其提供爲null。 –

回答

0

查詢的最後一個條件是有點用處(條件是始終true當值不null):

DEATH_RATE.DATA_YEAR = DEATH_RATE.DATA_YEAR 

我想你打算:

TIME_TO_EXPORT.DATA_YEAR = DEATH_RATE.DATA_YEAR 

(我假定這些字段具有相同的名稱) 在您的選擇中,您因此獲得了與'比利時'相關的所有TIME_TO_EXPORT記錄,無論價值爲DATA_YEAR

所以,你的查詢變爲:

SELECT DISTINCT DEATH_RATE.COUNTRY_NAME, 
       DEATH_RATE.DATA_YEAR, 
       DEATH_RATE.DEATH_RATE_VALUE, 
       TIME_TO_EXPORT.EXPORT_VALUE 
FROM DEATH_RATE, TIME_TO_EXPORT 
WHERE TIME_TO_EXPORT.COUNTRY_NAME IN ('Belgium') 
AND TIME_TO_EXPORT.COUNTRY_NAME = DEATH_RATE.COUNTRY_NAME 
AND DEATH_RATE.DATA_YEAR = 2012 
AND TIME_TO_EXPORT.DATA_YEAR = DEATH_RATE.DATA_YEAR ; 
+0

@a_horse_with_no_name這是正確的,但我會認爲它更多的是副作用而不是意圖。這不是一個可怕的方式來檢查一個值是不是'null'? –

+0

是的,這是問題..我的壞!!太多複製粘貼。非常感謝 ! –

0

這個替換您的最後一行:

AND TIME_TO_EXPORT.DATA_YEAR = DEATH_RATE.DATA_YEAR; 
0

DEATH_RATE是TIME_TO_EXPORT沒有正確連接。當然最後一行沒有意義。

相關問題