2015-06-19 76 views
0

我有以下SQL查詢:左/右/內對MySQL的聲明加入

SELECT band.id bid, band.name, bandInfo.summary, bandImage.url bandImage, 
user.username, user.online, userImage.url userImage 
FROM bands AS band 
INNER JOIN band_info AS bandInfo ON band.id = bandInfo.bid 
LEFT JOIN band_images AS bandImage ON band.id = bandImage.bid 
LEFT JOIN band_followers AS follower ON follower.bid = band.id 
RIGHT JOIN users AS user ON user.id = follower.uid 
INNER JOIN user_info AS userInfo ON userInfo.uid = user.id 
LEFT JOIN user_images AS userImage ON user.id = userImage.uid 
WHERE ((band.activated = 1) AND (user.activated = 1)) AND (bandInfo.language = 'fr') 
ORDER BY band.name 

「用戶」表包含所有用戶(一行=一個用戶)

「USER_INFO」表包含所有關於用戶的信息(一行=一個用戶)

「user_images」表包含有關用戶的所有圖像(一行=一個用戶)

「樂隊」表包含了所有的樂隊(一行=一個波段)

「band_info」表包含有關一個頻帶中的所有信息(多行用於一個頻帶由於語言)

「band_images」表包含有關頻帶中的所有圖像(一行=一個頻帶)

「 band_followers'表包含用戶和樂隊之間的所有關係(一行=一個關係,所以有很多行包含相同的樂隊ID但不是相同的用戶ID)

我想檢索所有樂隊與他們的信息(INNER JOIN )即使樂隊ID不在band_followers表中。即使他沒有任何圖像,我也想通過用戶的信息(INNER JOIN)檢索樂隊ID在band_followers表中帶有INNER JOIN的用戶的信息(INNER JOIN)。

我的問題是就在JOIN關鍵字..我真的不知道,如果我要使用LEFT或RIGHT JOIN

謝謝!

更新應答:

SELECT band.id bid, band.name, bandInfo.summary, bandImage.url bandImage, user.username, user.online, userImage.url userImage 
FROM bands AS band 
INNER JOIN band_info AS bandInfo ON band.id = bandInfo.bid 
LEFT JOIN band_images AS bandImage ON band.id = bandImage.bid 
LEFT JOIN band_followers AS follower ON band.id = follower.bid 
LEFT JOIN users AS user ON user.id = follower.uid AND user.activated = 1 
LEFT JOIN user_info AS userInfo ON userInfo.uid = user.id 
LEFT JOIN user_images AS userImage ON user.id = userImage.uid 
WHERE (band.activated = 1) AND (bandInfo.language = 'fr') 
ORDER BY band.name 

謝謝大家

回答

2

你應該usersuser_info之前使用LEFT JOIN,就像你做之前band_followersLEFT JOIN表示即使它們不匹配您要加入的表中的任何內容,也要返回先前表的所有行。 RIGHT JOIN表示返回您加入的表的所有行。因此,如果您使用RIGHT JOIN users,您將獲得所有用戶,而不僅僅是跟隨樂隊的用戶。

您還應該將測試user.activated = 1放入LEFT JOIN usersON子句中。否則,你會過濾掉所有沒有追隨者的樂隊,因爲他們沒有任何追隨者user.activated

+0

這是正確的答案,謝謝! – everytimeicob

1

簡單:「左連接」是指把左邊的項目,如果有匹配的合適的人,將其固定。

1

只要你有一個像

陳述即使帶ID不在band_followers表。

OR

即使他沒有任何圖像

嘗試使用OUTER JOIN喜歡的方式LEFT OUTER JOIN OR RIGHT OUTER JOIN按照您的要求。

+1

這就是他正在使用的。 'LEFT JOIN'和'RIGHT JOIN'總是外連接,'OUTER'這個詞是可選的。 – Barmar

+0

@Barmar,是的,但我相信OP說的是,他很困惑他是否應該使用OUTER/INNER join。這就是我想指出的答案。 – Rahul

+0

對不起,我誤解了你的答案,我以爲你只是告訴他把'LEFT JOIN'改成'LEFT OUTER JOIN'。 – Barmar