你有多个内连接和一个只影响其中一个连接的where子句吗?

时间:2015-11-18 11:00:00

标签: java mysql sql

这是我的sql命令:

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子句吗?我该怎么做?

3 个答案:

答案 0 :(得分:1)

我认为您需要使用LEFT JOIN子句链接USERS表,以便不使用userid = 0丢弃结果并删除WHERE子句上的GIG.USERID!= 0:

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;

答案 1 :(得分:0)

您可以在联接中使用多个条件,尝试类似

的内容
INNER JOIN USERS ON GIG.USERID = USERS.USERID AND GIG.USERID != 0
WHERE ...

答案 2 :(得分:0)

where子句适用于连接的结果,因此不能仅限于最后inner join

当然,您可以将条件添加到where子句中。但是你应该记住它会影响整个联接。

我建议您将条件添加到特定联接的on子句中。