2015-11-18 38 views
0

這是我的SQL命令:您是否可以使用隻影響其中一個連接的where子句擁有多個內部連接?

SELECT GIG.GIG_DESCRIPTION, VENUES.VENUE_NAME, BAND.BAND_NAME, 
CASE WHEN GIG.USERID = 0 THEN '--CREATED BY THE BAND--' ELSE USERS.USERNAME END, 
GIG.GIG_DATE 
from GIG 
INNER JOIN VENUES ON GIG.VENUEID = VENUES.VENUEID 
INNER JOIN BAND ON GIG.BANDID = BAND.BANDID 
INNER JOIN USERS ON GIG.USERID = USERS.USERID 
WHERE GIG.USERID != 0 
AND GIG.GIGID=" + gigID; 

我使用這個查詢Java對象返回一些值。在Gig表中,有時候userid將等於0,當我試着返回一個userid等於0的行時,我得到一個空指針異常。我想我可以擺脫錯誤,如果用戶最後一次內部連接如果某個條件不成立,則不運行。我可以使用隻影響最後一次連接的where子句嗎?我會怎麼做?

+1

什麼我的意思是在ELSE子句中嗎? – jarlh

+0

對不起,這是一個錯字 –

+0

你的條件'GIG.USERID!= 0'意味着查詢永遠不會返回0用戶ID。你的問題似乎在別處。 –

回答

1

我認爲你需要使用LEFT JOIN子句中爲了不丟棄的userid = 0的結果並取出GIG​​.USERID鏈接的用戶表上的= 0 WHERE子句:

SELECT GIG.GIG_DESCRIPTION, VENUES.VENUE_NAME, BAND.BAND_NAME, 
CASE WHEN GIG.USERID = 0 THEN '--CREATED BY THE BAND--' ELSE 
USERS.USERNAME END, 
GIG.GIG_DATE 
from GIG 
INNER JOIN VENUES ON GIG.VENUEID = VENUES.VENUEID 
INNER JOIN BAND ON GIG.BANDID = BAND.BANDID 
LEFT JOIN USERS ON GIG.USERID = USERS.USERID 
WHERE GIG.GIGID=" + gigID; 
+0

這一個工作,謝謝 –

0

您可以在一個連接,嘗試一些多個條件類似

INNER JOIN USERS ON GIG.USERID = USERS.USERID AND GIG.USERID != 0 
WHERE ... 
+0

感謝您的幫助,但我仍然得到一個空指針異常,我不知道爲什麼 –

0

where子句應用到的聯接的結果,因此它不能僅限於剛剛過去的inner join

當然,您可以將條件添加到where子句中。但是你應該記住它會影響整個連接。

我建議你將你的條件添加到你的on子句爲特定的連接。

相關問題