【发布时间】:2015-06-19 22:14:14
【问题描述】:
我有以下 SQL 查询:
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
'users' 表包含所有用户(一行 = 一个用户)
'user_info' 表包含一个用户的所有信息(一行 = 一个用户)
'user_images' 表包含关于用户的所有图像(一行 = 一个用户)
'bands' 表包含所有音乐乐队(一行 = 一个乐队)
'band_info' 表包含有关乐队的所有信息(由于语言,一个乐队的多行)
'band_images' 表包含所有关于波段的图像(一行 = 一个波段)
'band_followers' 表包含用户和乐队之间的所有关系(一行 = 一个关系,因此有很多行包含相同的乐队 id 但不同的用户 id)
即使乐队 ID 不在 band_followers 表中,我也想检索所有乐队及其信息(INNER JOIN)。当乐队 id 位于 band_followers 表中时,我也想检索所有乐队,并且用户 id 上的 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
谢谢大家
【问题讨论】:
标签: mysql