这是我的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子句吗?我该怎么做?
答案 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
子句中。