我有以下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)
我想用其信息(INNER JOIN)检索所有乐队,即使乐队ID不在band_followers表中。当band id在band_followers表中时,我想要检索所有band,并在用户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
谢谢大家
答案 0 :(得分:2)
您应该在LEFT JOIN
和users
之前使用user_info
,就像在band_followers
之前一样。 LEFT JOIN
表示返回前一个表的所有行,即使它们与您正在加入的表中的任何内容都不匹配。 RIGHT JOIN
表示返回您正在加入的表格的所有行。因此,如果您使用RIGHT JOIN users
,您将获得所有用户,而不仅仅是关注该频段的用户。
您还应该将测试user.activated = 1
放入ON
的{{1}}子句中。否则,您将过滤掉所有没有关注者的频段,因为他们没有LEFT JOIN users
的关注者。
答案 1 :(得分:1)
简单:“左连接”表示取左项,如果匹配正确,请附上它。
答案 2 :(得分:1)
只要你有
这样的陈述即使band_followers表中没有band id。
OR
即使他没有任何形象
根据您的要求,尝试OUTER JOIN
或LEFT OUTER JOIN
使用RIGHT OUTER JOIN
。
答案 3 :(得分:1)
这个问题可能会帮助你What is the difference between "INNER JOIN" and "OUTER JOIN"?
但最好的答案就是这张照片(在我看来)