我有以下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“用户”表包含所有用户(一行=一个用户)
“user_info”表包含有关用户的所有信息(一行=一个用户)
'user_images‘表包含关于用户的所有图像(一行=一个用户)
“乐队”表包含所有乐队(一行=一个乐队)
“band_info”表包含关于一个带的所有信息(由于语言的原因,一个带的多行)
'band_images‘表包含关于波段的所有图像(一行=一个带)
“band_followers”表包含用户和带之间的所有关系(一行=一个关系,因此有许多行包含相同的带id,而不是相同的用户id)
我想检索所有乐队与他们的信息(内部连接),即使乐队id不在band_followers表。当带id在band_followers表中时,我想检索所有的波段,在用户id上有一个内部连接和用户的信息(内部连接),即使他没有任何图像。
我的问题只是连接关键字..。我真的不知道我要用左还是右连接
谢谢!
最新答案:
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谢谢大家
发布于 2015-06-19 22:31:01
您应该在users和user_info之前使用user_info,就像在band_followers之前一样。LEFT JOIN意味着返回前面表的所有行,即使它们与您要加入的表中的任何行不匹配。RIGHT JOIN意味着返回要加入的表的所有行。所以如果你使用RIGHT JOIN users,你会得到所有的用户,而不仅仅是跟随乐队的用户。
您还应该将测试user.activated = 1放入LEFT JOIN users的ON子句中。否则,您将过滤掉所有没有追随者的乐队,因为他们没有任何user.activated追随者。
发布于 2015-06-19 22:16:58
简单:“左联接”意思是取左项,如果有一个匹配的右项,就附加它。
发布于 2015-06-19 22:17:42
无论你在哪里有这样的陈述
即使带id不在band_followers表中。
或
即使他没有任何形象
试着根据您的需求使用OUTER JOIN,比如LEFT OUTER JOIN或RIGHT OUTER JOIN。
https://stackoverflow.com/questions/30948030
复制相似问题