首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mysql语句的左/右/内连接

问mysql语句的左/右/内连接
EN

Stack Overflow用户
提问于 2015-06-19 22:14:14
回答 4查看 49关注 0票数 0

我有以下SQL查询:

代码语言:javascript
复制
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上有一个内部连接和用户的信息(内部连接),即使他没有任何图像。

我的问题只是连接关键字..。我真的不知道我要用左还是右连接

谢谢!

最新答案:

代码语言:javascript
复制
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

谢谢大家

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 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追随者。

票数 2
EN

Stack Overflow用户

发布于 2015-06-19 22:16:58

简单:“左联接”意思是取左项,如果有一个匹配的右项,就附加它。

票数 1
EN

Stack Overflow用户

发布于 2015-06-19 22:17:42

无论你在哪里有这样的陈述

即使带id不在band_followers表中。

或

即使他没有任何形象

试着根据您的需求使用OUTER JOIN,比如LEFT OUTER JOIN或RIGHT OUTER JOIN。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30948030

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档